在恢复之前显式创建数据库?

时间:2012-12-07 20:36:45

标签: sql database postgresql database-backups database-restore

当我设置我的PostgreSQL服务器时,我要做的第一件事就是为外部源导入数据库。以下哪项是正确的方法?

  • 在PostgreSQL服务器上创建一个名为“NEWDB”的数据库,然后 将我的外部“BACKUPDB”数据库从我的pg_dump导入到 “NEWDB”。

  • 不要在PostgreSQL服务器上创建数据库,然后导入 “NEWDB”数据库,从而自动创建“NEWDB” postgresql server。

我想我的问题是,如果我想将现有数据库导入PostgreSQL服务器,我是否首先需要创建一个数据库才能进入?

1 个答案:

答案 0 :(得分:3)

你没有拥有。这取决于你想要达到的目标。如果您使用pg_dump转储单个数据库,则不会包含CREATE DATABASEALTER DATABASE命令。您应该连接到现有数据库。所以你必须先创建它。
我引用advice from the manual

  

如果您的数据库群集对template1有任何本地添加   数据库,小心将pg_dump的输出恢复为真正的   空数据库;否则你可能会因为错误而得到错误   重复添加对象的定义。制作一个空数据库   没有任何本地添加,从template0复制而不是template1,for   例如:

     

CREATE DATABASE foo WITH TEMPLATE template0;

还有:

  

转储文件也不包含任何ALTER DATABASE ... SET   命令;这些设置由pg_dumpall和数据库转储   用户和其他安装范围的设置。

另一方面,

pg_dumpall转储整个数据库集群,包括用户等元对象。它包含CREATE DATABASE语句,并在还原时连接到每个数据库。您甚至可以使用DROP DATABASE-c)选项添加--clean个语句。小心。

PostgreSQL的每个实例都有一个名为“postgres”的默认维护数据库,您可以连接到该数据库 - 例如创建数据库或启动完全恢复(来自pg_dumpall)。但是必须针对其目标数据库运行单数据库转储(来自pg_dump)。

最后:

  

一旦恢复,最好在每个数据库上运行ANALYZE,以便   优化器有有用的统计信息。你也可以运行vacuumdb -a -z来   分析所有数据库。