我运行以下代码来设置我的数据库,当运行第三个命令psql:db/seed_data.sql:3: ERROR: permission denied for function lo_import
时,我得到一个错误
setup.sh
psql -h localhost -p 5432 \
--dbname=postgres \
--file=db/db_setup.sql
psql -h localhost -p 5432 \
--username=admin \
--dbname=mydb \
--file=db/schema.sql
psql -h localhost -p 5432 \
--username=admin \
--dbname=mydb \
--file=db/seed_data.sql
字符串
db_setup.sql将所有权限授予我的管理员用户
CREATE DATABASE mydb;
CREATE ROLE admin WITH LOGIN;
GRANT ALL PRIVILEGES ON DATABASE mydb to admin;
型
seed_data. sql包含以下命令
INSERT INTO mydb(name, raster) VALUES('Herald', lo_import('/Users/myname/this-folder/some-image-name.png'));
型
当我从PQSL命令行手动运行该命令时,它会成功,但是当我尝试在setup.sh脚本的上下文中运行它时,它会失败。
我很困惑,因为用户应该拥有插入数据库的所有权限。some-image-name.png
的文件权限为-rwxr-xr-x
1条答案
按热度按时间disho6za1#
根据文档lo functions。特别是:
服务器端的lo_import和lo_export函数的行为与客户端的类似函数有很大的不同。这两个函数使用数据库所有者的权限在服务器的文件系统中读取和写入文件。因此,默认情况下,它们的使用仅限于超级用户。