PostgreSQL如何创建数据库或模式的副本?

时间:2009-04-30 19:53:55

标签: sql database postgresql

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

我正在测试一些软件,它对数据库中的特定模式进行了大量更新,我想复制它,以便我可以对原始文件进行一些比较。

5 个答案:

答案 0 :(得分:30)

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

CREATE DATABASE newdb WITH TEMPLATE olddb;

答案 1 :(得分:22)

带有--schema-only选项的

pg_dump

答案 2 :(得分:11)

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

选项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
    
  5. 选项B

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

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

这是指向备份和恢复的examples的链接。您可以使用备份还原到其他服务器或其他任何