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


当前回答

在原始数据库处于流量状态的生产环境中,我只使用:

pg_dump production-db | psql test-db

其他回答

在pgAdmin中打开主窗口,然后打开另一个查询工具窗口在pgAdmin的主窗口中,

断开要用作模板的“模板化”数据库。

转到查询工具窗口

运行2个查询,如下所示

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

(上面的SQL语句将终止与TemplateDB的所有活动会话,然后您现在可以选择它作为模板来创建新的TargetDB数据库,这样可以避免出现已在使用的错误。)

CREATE DATABASE 'TargetDB'
  WITH TEMPLATE='TemplateDB'
       CONNECTION LIMIT=-1;

不知道pgAdmin,但pgdump为您提供了SQL中数据库的转储。您只需要使用相同的名称创建数据库

psql mydatabase < my dump

以恢复所有表及其数据和所有访问权限。

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

答覆:

CREATE DATABASE newdb WITH TEMPLATE originaldb;

经过尝试和测试。

要使用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

贝尔回答的命令行版本:

createdb -O ownername -T originaldb newdb

这应该在数据库主机(通常是postgres)的权限下运行。