【问题标题】:PostgreSQL how to create a copy of a database or schema?PostgreSQL 如何创建数据库或模式的副本?
【发布时间】:2010-10-22 23:09:16
【问题描述】:

有没有一种简单的方法可以在 PostgreSQL 8.1 中创建数据库或模式的副本?

我正在测试一些软件,它对数据库中的特定架构进行了大量更新,我想制作一个副本,以便与原始版本进行一些比较。

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    如果它在同一台服务器上,您只需使用带有 TEMPLATE 参数的 CREATE DATABASE 命令。例如:

    CREATE DATABASE newdb WITH TEMPLATE olddb;
    

    【讨论】:

    • 这也将数据复制到了新数据库中......任何相关的方法可以在没有数据的情况下做到这一点???
    • $ createdb -T olddb newdb
    • 也许你得到以下消息错误“源数据库“olddb”正在被其他用户访问”。要解决它,请参阅此答案:stackoverflow.com/a/14375832/2123917
    • 使用OWNER设置新的数据库所有者:CREATE DATABASE newdb WITH TEMPLATE olddb OWNER new_db_user;
    【解决方案2】:

    pg_dump--schema-only 选项。

    【讨论】:

    • 将“7.4”替换为“current”,您就有了最新版本的链接。
    • 很好,如果数据库在不同的服务器上并且负载很高,它也可以工作。谢谢
    【解决方案3】:

    如果您必须将架构从本地数据库复制到远程数据库,您可以使用以下两个选项之一。

    选项 A

    1. 将架构从本地数据库复制到转储文件。

      pg_dump -U postgres -Cs database > dump_file
      
    2. 将转储文件从本地服务器复制到远程服务器。

      scp localuser@localhost:dump_file remoteuser@remotehost:dump_file
      
    3. 连接到远程服务器。

      ssh remoteuser@remotehost
      
    4. 将模式从转储文件复制到远程数据库。

      psql -U postgres database < dump_file
      

    选项 B

    直接将模式从本地数据库复制到远程数据库,而不使用中间文件。

    pg_dump -h localhost -U postgres -Cs database | psql -h remotehost -U postgres database
    

    如果您想了解有关使用pg_dump 复制数据库的选项的更多信息,此blog post 可能会对您有所帮助。

    【讨论】:

    • #3 说db_name 不存在。有没有办法在不创建数据库的情况下从架构中恢复。
    【解决方案4】:

    这可以通过运行以下命令来完成:

    CREATE DATABASE [Database to create] WITH TEMPLATE [Database to copy] OWNER [Your username];
    

    填写您的数据库名称和用户名后,这将创建指定数据库的副本。只要您要复制的数据库没有其他活动连接,这将起作用。如果还有其他活动连接,您可以先使用此命令临时终止连接:

    SELECT pg_terminate_backend(pg_stat_activity.pid) 
    FROM pg_stat_activity 
    WHERE pg_stat_activity.datname = '[Database to copy]' 
    AND pid <> pg_backend_pid();
    

    我为 Chartio 的数据学校写的一篇好文章更深入地介绍了如何做到这一点,可以在这里找到: https://dataschool.com/learn/how-to-create-a-copy-of-a-database-in-postgresql-using-psql

    【讨论】:

      【解决方案5】:

      这里是一些examples 的备份和恢复链接。您可以使用备份恢复到不同的服务器或其他任何东西

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-26
        • 2014-08-19
        • 2015-01-03
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 2015-05-25
        • 1970-01-01
        相关资源
        最近更新 更多