pg_dump不写“ CREATE EXTENSION postgis;”。

pio*_*kuc 7 postgresql postgis

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

CREATE EXTENSION postgis;
Run Code Online (Sandbox Code Playgroud)

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

Lau*_*lbe 7

几种可能性:

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

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

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

  • 是的,如果将转储限制为架构,则即使扩展架构属于转储架构中,它也不会转储扩展。我扩大了答案以涵盖这种可能性。 (6认同)
  • 我的问题是:我可以让 pg_dump 将 `CREATE EXTENSION postgis;" 写入转储吗?也许我要转储到备份的数据库有更多扩展。我希望转储中包含所有扩展。 (3认同)
  • 不,没有办法做到这一点。您可以尝试*排除*您不需要的所有架构。 (2认同)