复制没有LOCK权限的postgres数据库

DrS*_*ker 29 database postgresql

我需要将postgres数据库从一个服务器复制到另一个服务器,但我拥有的凭据没有锁定数据库的权限,因此pg_dump失败.我对相关数据库有完整的读/更新/插入权限.

如何制作此数据库的副本?我并不担心不一致(它是开发服务器上的一个小型数据库,因此提取过程中出现不一致的风险很小)

[编辑]完整错误:

$ pg_dump --username=bob mydatabase > /tmp/dump.sql 
pg_dump: SQL command failed 
pg_dump: Error message from server: ERROR:  permission denied for relation sl_node 
pg_dump: The command was: LOCK TABLE _replication.sl_node IN ACCESS SHARE MODE  
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 19

错误:关系sl_node的权限被拒绝

这是你真正的问题.

确保用户bob具有以下SELECT权限_replication.sl_node.这有什么机会是Slony系统表还是什么?


mam*_*aye 10

这对我有用

sudo -u postgres pg_dump -Fc -c db_name > file_name.pgdump  
Run Code Online (Sandbox Code Playgroud)

然后创建一个DB并运行pg_restore:

 sudo -u postgres /usr/local/pgsql/bin/pg_restore -U postgres -d db_name -v file_name.pgdump
Run Code Online (Sandbox Code Playgroud)


Fra*_*ens 6

您需要SELECT对所有数据库对象的权限(读取)才能进行转储,而不是LOCK权限(无论可能是什么).当您开始pg_dump转储时,完整的错误消息是什么?


ara*_*nid 6

pg_dump不会锁定整个数据库,但它会在要转储的所有表上获得显式锁定。此锁以“访问共享模式”获取,这与 SELECT 语句所需的锁级别相同:它旨在防止其中一个表在它决定转储哪些表然后获取数据之间被删除。

所以听起来您的问题实际上可能是它试图转储您没有权限的表?PostgreSQL 没有数据库级别的读取/更新/插入权限,所以也许您只是在某处缺少从单个表中选择权限...

正如 Frank H. 建议的那样,发布完整的错误消息,我们将尝试帮助解码。