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


当前回答

PostgreSQL 9.1.2:

$ CREATEDB new_db_name -T orig_db_name -O db_user;

其他回答

在pgAdmin中,您可以从原始数据库进行备份,然后只需创建一个新数据库并从刚刚创建的备份中恢复:

右键单击源数据库,备份。。。并转储到文件。右键单击,新建对象,新建数据库。。。并命名目的地。右键单击新数据库,还原。。。然后选择文件。

PostgreSQL 9.1.2:

$ CREATEDB new_db_name -T orig_db_name -O db_user;

复制“欠载”数据库

我把这个方法和上面的例子拼凑在一起。我正在一台“负载不足”的服务器上工作,当我尝试使用@zbyszek的方法时出错。我也在寻求“仅限命令行”的解决方案。

createdb:数据库创建失败:错误:其他用户正在访问源数据库“exampledb”。

以下是对我有效的方法(命令前加nohup,以将输出移动到文件中并防止服务器断开连接):

nohup pg_dump示例b>example-01.sqlcreatedb-O postgres示例bclone_01我的用户是“postgres”nohup psql示例bclone_01<示例-01.sql

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();

试试看:

CREATE DATABASE newdb WITH ENCODING='UTF8' OWNER=owner TEMPLATE=templatedb LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' CONNECTION LIMIT=-1;

gl XD公司