如何将postgresql数据库恢复到完全相同的状态?

时间:2016-03-09 15:28:42

标签: postgresql pg-dump

我正在尝试

  1. 创建PostgreSQL数据库的快照(使用pg_dump),
  2. 做一些随机测试,
  3. 恢复到与快照完全相同的状态,并进行其他一些随机测试。
  4. 这些可能会在很多/不同的日子里发生。此外,我在一个多用户环境中,我不是数据库管理员。特别是,我无法创建新的数据库。

    但是,当我使用

    恢复数据库时
     gunzip -c dump_file.gz | psql my_db 
    

    上述步骤2中的更改仍然存在。

    例如,如果我复制一张表:

     create table foo1 as (select * from foo);
    

    然后恢复,复制的表foo1仍然存在。

    有些人可以解释如何恢复到完全相同的状态,就好像第2步从未发生过一样?

    - 更新 -

    根据评论@a_horse_with_no_name,我试图使用

    DROP OWNED BY my_db_user 
    

    在恢复之前删除所有对象,但是我收到了与无法控制的扩展名相关的错误,而且我的表格保持不变。

    ERROR:  cannot drop sequence bg_gid_seq because extension postgis_tiger_geocoder requires it
    HINT:  You can drop extension postgis_tiger_geocoder instead.
    

    有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你必须通过删除和重新创建数据库或类似的东西来删除那里的所有内容。 pg_dump基本上只是创建一个SQL脚本,在应用时,将确保所有表,存储过程等存在并拥有其数据。它不会删除任何内容。

答案 1 :(得分:0)

您可以使用PostgreSQL Schemas