【问题标题】:Create database explicitly before restoring to it?在还原到数据库之前显式创建数据库?
【发布时间】:2012-12-07 20:36:44
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    如果您的数据库集群有任何本地添加到模板1 数据库,注意将 pg_dump 的输出恢复为真正的 空数据库;否则你很可能会因为以下原因而出错 添加对象的重复定义。创建一个空数据库 没有任何本地添加,从 template0 而不是 template1 复制,对于 示例:

    CREATE DATABASE foo WITH TEMPLATE template0;

    还有:

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

    另一方面,

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

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

    最后:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2019-12-23
      • 1970-01-01
      相关资源
      最近更新 更多