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

Jin*_*Kim 29 sql database postgresql

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

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

Jor*_*nes 33

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

  • 这也将数据复制到新数据库...没有数据的任何相关方法吗??? (11认同)
  • 或`$ createdb -T olddb newdb` (2认同)

mkb*_*mkb 23

pg_dump--schema-only选项.

  • 将"7.4"替换为"当前",您将获得最新版本的链接. (6认同)

Ali*_*ani 11

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

选项A.

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

    pg_dump -U postgres -Cs database > dump_file
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将转储文件从本地服务器复制到远程服务器.

    scp localuser@localhost:dump_file remoteuser@remotehost:dump_file
    
    Run Code Online (Sandbox Code Playgroud)
  3. 连接到远程服务器.

    ssh remoteuser@remotehost
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将架构从转储文件复制到远程数据库.

    psql -U postgres database < dump_file
    
    Run Code Online (Sandbox Code Playgroud)

选项B.

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

pg_dump -h localhost -U postgres -Cs database | psql -h remotehost -U postgres database
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关使用复制数据库的选项的更多信息,此博客文章可能对您有所帮助pg_dump.


Mat*_*yne 9

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

CREATE DATABASE [Database to create] WITH TEMPLATE [Database to copy] OWNER [Your username];
Run Code Online (Sandbox Code Playgroud)

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

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();
Run Code Online (Sandbox Code Playgroud)

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