Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL如何创建数据库或模式的副本?_Sql_Database_Postgresql - Fatal编程技术网

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

PostgreSQL如何创建数据库或模式的副本?,sql,database,postgresql,Sql,Database,Postgresql,在PostgreSQL 8.1中,有没有一种简单的方法来创建数据库或模式的副本 我正在测试一些软件,这些软件对数据库中的特定模式进行大量更新,我想复制一份,以便与原始模式进行比较。使用--schema only选项 这里是一些备份和恢复的链接。您可以使用备份还原到不同的服务器或其他任何服务器。如果备份位于同一服务器上,只需使用带有模板参数的CREATE DATABASE命令即可。例如: CREATE DATABASE newdb WITH TEMPLATE olddb; 如果必须将架构从本地数

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


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

使用
--schema only
选项

这里是一些备份和恢复的链接。您可以使用备份还原到不同的服务器或其他任何服务器。如果备份位于同一服务器上,只需使用带有模板参数的CREATE DATABASE命令即可。例如:

CREATE DATABASE newdb WITH TEMPLATE olddb;

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

选项A

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

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

    scp localuser@localhost:dump_file remoteuser@remotehost:dump_file
    
    ssh remoteuser@remotehost
    
  • 连接到远程服务器

    scp localuser@localhost:dump_file remoteuser@remotehost:dump_file
    
    ssh remoteuser@remotehost
    
  • 将架构从转储文件复制到远程数据库

    psql -U postgres database < dump_file
    

    如果您想了解更多有关使用
    pg_dump

    复制数据库的选项,这可能会对您有所帮助。可以通过运行以下命令来完成此操作:

    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();
    
    选择pg\u terminate\u后端(pg\u stat\u activity.pid)
    来自pg_统计_活动
    其中pg_stat_activity.datname=“[要复制的数据库]”
    和pid pg_backend_pid();
    
    我为Chartio的数据学校写的一篇好文章更深入地介绍了如何做到这一点,可以在这里找到:

    将“7.4”替换为“当前”,您将获得指向最新版本的链接。这还会将数据复制到新数据库中。。。在没有数据的情况下执行此操作的任何相关方法???或
    $createdb-T olddb newdb
    可能您会收到以下消息错误:“其他用户正在访问源数据库”olddb“。要解决此问题,请参见以下答案:。使用
    OWNER
    设置新的数据库所有者:
    使用模板olddb OWNER new\u DB\u user创建数据库newdb#3表示
    db_name
    不存在。有没有一种方法可以从模式中恢复,而不必在先前的模式中创建数据库。