PostgreSQL数据库导入失败求助:Postbird及CLI均遇问题
解决PostgreSQL导入SQL文件时的Permission Denied错误
你遇到的Permission denied是操作系统层面的权限问题,和PostgreSQL的数据库权限无关——你给postgres用户授予数据库权限的操作没问题,但当前postgres用户没有读取/home/dev/...路径下SQL文件的权限(因为这个目录属于dev普通用户,postgres默认没有访问权限)。
下面是三种可行的解决方法:
方法一:复制文件到postgres可访问的目录
# 1. 用sudo把SQL文件复制到postgres的家目录(默认是/var/lib/postgresql/) sudo cp /home/dev/Document/codecademy/TheBestOfBaseballAwards/baseball_database.sql /var/lib/postgresql/ # 2. 切换到postgres用户(如果当前不是) sudo su - postgres # 3. 执行导入命令 psql -U postgres -d baseball < /var/lib/postgresql/baseball_database.sql # 4. 导入完成后可删除复制的文件(可选) rm /var/lib/postgresql/baseball_database.sql
方法二:修改文件和父目录的权限
给postgres用户开放SQL文件的读取权限,同时确保所有父目录有执行权限(否则postgres无法进入目录):
# 给其他用户添加SQL文件的读权限 chmod o+r /home/dev/Document/codecademy/TheBestOfBaseballAwards/baseball_database.sql # 依次给所有父目录添加其他用户的执行权限 chmod o+x /home/dev/Document/codecademy/TheBestOfBaseballAwards/ chmod o+x /home/dev/Document/codecademy/ chmod o+x /home/dev/Document/ chmod o+x /home/dev/
执行完以上命令后,再重新运行你的导入指令即可。
方法三:直接用sudo跨用户执行(推荐)
如果你当前处于dev用户,直接用-u postgres参数让sudo以postgres身份运行psql,这样既能读取dev用户目录下的文件,又能连接PostgreSQL:
sudo -u postgres psql -d baseball < /home/dev/Document/codecademy/TheBestOfBaseballAwards/baseball_database.sql
内容的提问来源于stack exchange,提问作者anthony
相关产品推荐
相关产品推荐

