1

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

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

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

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

4

1 回答 1

3

不必。这取决于您想要达到的目标。如果您使用 , 转储单个数据库,则不包括命令。您应该连接到现有数据库。所以你必须先创建它。 我引用手册中的建议pg_dumpCREATE DATABASEALTER DATABASE

如果您的数据库集群对 template1 数据库有任何本地添加,请小心将 pg_dump 的输出恢复到真正空的数据库中;否则,由于添加的对象的重复定义,您可能会遇到错误。要创建一个没有任何本地添加的空数据库,请从模板 0 而不是模板 1 复制,例如:

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 来分析所有数据库。

于 2012-12-07T22:58:26.510 回答