我正在尝试用现有数据库替换现有数据库pg_restore
并遇到问题。如果这个问题很简单,我很抱歉。
具体来说,我的 Postgres 安装设置如下:
postgres
拥有的数据库root
d
拥有的数据库u
restore
拥有的数据库u
(稍后会详细介绍)
我创建了一个像pg_dump --format=custom ...
. 我现在正试图d
用该转储的内容替换。具体来说,我正在运行类似pg_restore -cC --dbname=$DB --exit-on-error --format=custom --username=$USER
.
但似乎无论 和 的什么组合$DB
,$USER
Postgres 都无法恢复。从错误消息(如下)来看,Postgres 似乎希望用户同时root
是d
. 我已阅读手册页并尝试了各种组合但无济于事。
我究竟做错了什么?
具体来说,如果$DB
是d
,不管$USER
,我得到
错误:无法删除当前打开的数据库
命令是:DROP DATABASE d;
很公平。所以让我们尝试$DB=postgres
一下$USER=root
:
错误:必须是数据库 d 的所有者
命令是:DROP DATABASE d;
$DB=postgres
好的,让我们尝试一下$USER=u
:
错误:必须是角色“root”的成员
命令是:ALTER DATABASE d OWNER TO root;
嗯?也许这与登录?postgres
所拥有的root
? 让我们尝试$DB=restore
(专门为此目的创建)和$USER=u
:
错误:必须是角色“root”的成员
命令是:ALTER DATABASE d OWNER TO root;
显然,“root”不是超级用户(考虑到“root”这个词的正常含义,这有点奇怪)。
pg_restore
您要运行的命令必须以超级用户身份运行。只有超级用户才能删除其他人的数据库,然后创建一个属于其他人的新数据库。虽然看起来恢复的数据库将归“root”所有,而不是“u”。我想这不是您所期望的,而是
pg_dump
输出中编码的内容。