PostgreSQL恢复Mayan-EDMS数据库时提示permission denied to create database的解决方法
解决PostgreSQL恢复Mayan-EDMS备份时的权限问题
这个错误的核心原因很明确:你用来执行恢复的mayan用户没有创建数据库的权限,而你的file.sql备份文件里包含了CREATE DATABASE语句(大概率是用pg_dumpall生成的全量备份,或者备份时包含了数据库创建逻辑)。下面给你几种针对性的解决办法:
方法1:用超级用户直接恢复(最简单快捷)
PostgreSQL的默认超级用户是postgres,它拥有所有权限,直接用它来执行恢复命令就能绕过权限限制:
psql -h 127.0.0.1 -U postgres -d mayan -W -f file.sql
执行时输入postgres用户的密码即可。如果你的mayan数据库还没创建,这条命令也能自动完成数据库创建(因为postgres有权限)。
方法2:给mayan用户添加创建数据库的权限
如果你希望继续用mayan用户执行恢复,需要先给它赋予CREATEDB权限:
- 先用超级用户登录PostgreSQL:
psql -h 127.0.0.1 -U postgres -W
- 在psql交互界面中执行权限修改命令:
ALTER USER mayan CREATEDB;
- 输入
\q退出交互界面,然后重新执行你原来的恢复命令即可。
方法3:修改备份文件,移除多余的数据库创建语句
如果你的mayan数据库已经存在,备份文件里的CREATE DATABASE语句其实是多余的,可以手动删除这部分内容:
- 打开
file.sql文件,找到类似下面的语句块:
CREATE DATABASE mayan WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE_PROVIDER = libc LOCALE = 'en_US.UTF-8';
ALTER DATABASE mayan OWNER TO mayan;
\connect mayan;
- 删除这些语句,保存文件后重新执行恢复命令。
额外提示:避免后续再遇到这个问题
如果是备份时的问题,建议你后续备份Mayan-EDMS数据库时,不要用pg_dumpall(全量备份所有数据库),而是用pg_dump单独备份mayan数据库,这样备份文件里就不会包含CREATE DATABASE语句:
pg_dump -h 127.0.0.1 -U mayan -d mayan -W -f mayan_backup.sql
内容的提问来源于stack exchange,提问作者Sandaru Akalanka
相关产品推荐
相关产品推荐

