Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否在还原到数据库之前显式创建数据库?_Sql_Database_Postgresql_Database Backups_Database Restore - Fatal编程技术网

Sql 是否在还原到数据库之前显式创建数据库?

Sql 是否在还原到数据库之前显式创建数据库?,sql,database,postgresql,database-backups,database-restore,Sql,Database,Postgresql,Database Backups,Database Restore,当我安装PostgreSQL server时,我要做的第一件事就是为外部源导入数据库。以下哪项是正确的方法 在PostgreSQL服务器上创建一个名为“NEWDB”的数据库,然后 将我的外部“BACKUPDB”数据库从我的pg_转储导入 “新数据库” 不要在PostgreSQL server上创建数据库,请导入 “NEWDB”数据库,从而在 postgresql server 我想我的问题是,如果我想将现有数据库导入PostgreSQL server,我是否需要先创建一个数据库,以便它进入?

当我安装PostgreSQL server时,我要做的第一件事就是为外部源导入数据库。以下哪项是正确的方法

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

  • 不要在PostgreSQL server上创建数据库,请导入 “NEWDB”数据库,从而在 postgresql server

我想我的问题是,如果我想将现有数据库导入PostgreSQL server,我是否需要先创建一个数据库,以便它进入?

您不必这样做。这取决于你想要实现什么。如果使用转储单个数据库,则不包括
CREATE database
ALTER database
命令。您需要连接到现有数据库。因此,您必须首先创建它。
我引述:

如果您的数据库集群在模板中有任何本地添加1 数据库中,请小心将pg_dump的输出恢复到 空数据库;否则,由于以下原因,您可能会出现错误: 添加对象的重复定义。创建空数据库的步骤 在没有任何本地添加的情况下,从template0复制而不是从template1复制,例如 例如:

使用模板template0创建数据库foo

而且:

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

另一方面,转储整个DB集群,包括像用户这样的元对象。它包括
CREATE DATABASE
语句,并在恢复时连接到每个数据库。您甚至可以使用
-c
-clean
)选项包含
DROP DATABASE
语句。小心点

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

最后:

恢复后,明智的做法是在每个数据库上运行ANALYZE,以便 优化器具有有用的统计信息。您还可以运行vacuumdb-a-z来 分析所有数据库