繁体   English   中英

如何备份和恢复一个PostgreSQL数据库?

[英]How to backup and restore one PostgreSQL database?

大师我需要备份和恢复一个PostgreSQL数据库。 我的os版本是Ubuntu-14.04 64bit,PostgreSQL是:

gid: ~/works $ pg_config --version
PostgreSQL 9.3.15

我使用pg_dump来备份数据库:

gid: ~/works $ pg_dump -U db_name_user -F t db_name > db_name.tar

我尝试使用pg_restore来恢复数据库并失败:

gid: ~/works $ pg_restore -U db_name_user -F t -d db_name db_name.tar

pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3621; 0 0 COMMENT EXTENSION plpgsql 
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

pg_restore: WARNING:  no privileges could be revoked for "public"
pg_restore: WARNING:  no privileges could be revoked for "public"
pg_restore: WARNING:  no privileges were granted for "public"
pg_restore: WARNING:  no privileges were granted for "public"
WARNING: errors ignored on restore: 1

我不知道这意味着什么? 我如何备份和恢复PostgreSQL数据库?

非常感谢。

------------------------ update 1 ------------------------

即使我在pg_dump和pg_restore中添加了“--no-owner”选项,我仍然会收到相同的错误消息:

gid:~/works $ pg_restore -U db_name_user -O -Ft -d db_name db_name.tar 
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3621; 0 0 COMMENT EXTENSION plpgsql 
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
    Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';  

pg_restore: WARNING:  no privileges could be revoked for "public"
pg_restore: WARNING:  no privileges could be revoked for "public"
pg_restore: WARNING:  no privileges were granted for "public"
pg_restore: WARNING:  no privileges were granted for "public"
WARNING: errors ignored on restore: 1

您可以忽略评论语言时的错误 - 它不会影响您的代码。 还要考虑不使用所有者来避免此类警告。 但请记住,所有者将是您在pg_restore上连接的用户,而不是原始用户。 请阅读文档: https//www.postgresql.org/docs/current/static/app-pgrestore.html

-O

--no-owner不输出命令来设置对象的所有权以匹配原始数据库。 默认情况下,pg_restore发出ALTER OWNER或SET SESSION AUTHORIZATION语句以设置创建的模式元素的所有权。 除非与超级用户(或拥有脚本中所有对象的同一用户)建立与数据库的初始连接,否则这些语句将失败。 使用-O,任何用户名都可以用于初始连接,并且该用户将拥有所有创建的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM