首页 > 解决方案 > 无法使用不同的用户名从 pg_dump 恢复 psql 数据库

问题描述

我需要使用 postgres username1 从 computer1 转储一个 postgres 数据库,然后使用 postgres username2 在 computer2 上恢复它。我一直遇到看起来备份文件想要使用 username1 的错误:

当我在computer2上运行它时:

psql dbname < backupname.pgsql

我收到此错误:

ERROR:  role "username1" does not exist

我试过了:

// Dumping from computer1:

pg_dump dbname > backupname.sql
pg_dump dbname > backupname.pgsql
pg_dump -U username1 dbname -N topology -T spacial_ref_sys > backupname.pgsql


// Restoring on computer2:

psql dbname < backupname.pgsql

是需要修改转储还是恢复才能克服这个问题?

标签: postgresqlpsqlpg-dumppg-restore

解决方案


问题在于倾销。根据这篇文章的见解,我能够使用以下方法解决这个问题:

// On Computer1

pg_dump dbname -O -x > backupname.sql


// On Computer2

psql dbname < backupname.sql

使用的选项标志pg_dump是:

-O   <-- No owner
         Do not output commands to set ownership of objects to match the original database

-x   <-- No privileges
         Prevent dumping of access privileges (grant/revoke commands)

有关选项标志的更多信息,请参阅pg_dump 的 PostgreSQL 文档。


推荐阅读