【问题标题】:pg_dump does not write "CREATE EXTENSION postgis;"pg_dump 不写“CREATE EXTENSION postgis;”
【发布时间】:2017-11-10 13:17:53
【问题描述】:

我们已经使用 pg_dump 转储了一个使用 postgis 扩展的数据库。在另一台机器上手动创建数据库后,尝试使用 psql 将转储加载到其中失败。原来转储中没有包含必要的语句

CREATE EXTENSION postgis;

postgis 扩展安装在 Postgres 的目标实例中,但仅在手动执行 CREATE EXTENSION 加载转储成功之后。这似乎没什么大不了的,但问题是:是否可以强制 pg_dump 将所有必需的 CREATE EXTENSION foo; 语句写入转储中,这样我就不必手动执行了吗?我在 pg_dump 在线文档中没有看到任何选项。

【问题讨论】:

    标签: postgresql postgis


    【解决方案1】:

    您可以使用它来转储架构和扩展(在 11.2 上测试):

    pg_dump -U postgres -d mydb -s > dump.sql
    

    【讨论】:

      【解决方案2】:

      几种可能性:

      1. 此数据库已从 CREATE EXTENSION 尚不存在的旧版本升级。

      2. 有人错误地通过执行 SQL 脚本而不是运行 CREATE EXTENSION 来安装 PostGIS。

      3. 您不会转储整个数据库,而是使用 -n 选项将转储限制为架构。

      【讨论】:

      • 我的问题是:我可以让 pg_dump 写 `CREATE EXTENSION postgis;" 到转储吗?也许我要转储到备份的数据库有更多扩展名。我希望转储有里面的所有扩展。
      • 好的,我明白你的意思了。我会检查一下,实际上是其他人创建了原始数据库,所以我不知道 postgis 是如何安装在那里的。谢谢!
      • 是的,如果将转储限制为模式,即使扩展模式在转储模式中,它也不会转储扩展。我已经扩展了答案以涵盖这种可能性。
      • 不,没有办法做到这一点。您可以尝试排除您确实想要的所有模式。
      • 刚刚使用 Postgresql 11.2 对所有表和数据进行了完整转储,但仍然没有输出“CREATE EXTENSION postgis;”
      猜你喜欢
      • 2014-10-06
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 2014-08-31
      • 2017-02-09
      相关资源
      最近更新 更多