我正在尝试在接收数据库上没有适当角色的情况下恢复转储。
如here和here所述,您需要将the--no-owner
作为一个选项,或者在其中pg_dump
或pg_restore
两者中。
我使用以下命令行来创建我的转储:
"C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******[email protected]:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar
恢复线如下:
"C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar"
如您所见,两者都可以--no-owner
选择,但最终出现以下错误:
让我非常烦恼的是下面的日志:
pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») :
pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 2633 ; 0 0 ACL adm avo******
pg_restore: [programme d'archivage (db)] could not execute query: ERREUR: role « avo****** » does not exist
为什么即使指定了角色,它也说它需要一个角色--no-owner
?
我错过了什么?
我在 Postgres 9.3 上运行
pg_restore
设置 ACL时发生错误:您可以使用--no-acl
来阻止GRANT
命令。使用 中的
-Ft
选项pg_dump
,您只能跳过 中的角色和 ACLpg_restore
。--list
如果您需要更多详细信息,还可以编辑目录。使用 PostgreSQL 12.4:
这是一个例子:
以下命令导出数据而不将其与角色或权限数据混合,以便您可以将其导入到您指定的任何角色。此外,您可以让 pg_dump 为您将数据压缩到一个 tar 文件中。
或者做同样事情的更短的
要恢复,您将使用几乎相同的标志,并提及您希望所有权属于哪个角色。
以下是所有这些标志的含义以及其他选项的更多信息,例如压缩级别或输出格式。您可以通过
pg_dump --help
或找到更多信息pg_restore --help
: