在PostgreSQL中创建一个数据库的副本

将整个数据库(其结构和数据)复制到pgAdmin中的新数据库的正确方法是什么?


Postgres允许在创建新数据库时使用服务器上的任何现有数据库作为模板。 我不确定pgAdmin是否提供了创建数据库对话框的选项,但是如果没有,您应该可以在查询窗口中执行以下操作:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

不过,你可能会得到:

ERROR:  source database "originaldb" is being accessed by other users

要修复它,你可以使用这个查询

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();

贝尔的答案的命令行版本:

createdb -O ownername -T originaldb newdb

这应该在数据库主服务器的权限下运行,通常是postgres。


要用postgres克隆现有的数据库,你可以这样做

/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();

/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE TARGET_DB WITH TEMPLATE SOURCE_DB OWNER USER_DB;

IT将终止所有到源数据库的连接,避免出错

ERROR:  source database "SOURCE_DB" is being accessed by other users
链接地址: http://www.djcxy.com/p/56961.html

上一篇: Creating a copy of a database in PostgreSQL

下一篇: PostgreSQL Autoincrement