我们已经使用 pg_dump 转储了使用 postgis 扩展的数据库。在另一台计算机上手动创建数据库后,尝试使用 psql 将转储加载到其中失败。结果转储中没有包含必要的语句
CREATE EXTENSION postgis;
postgis 扩展已安装在 Postgres 的目标实例中,但仅在手动执行
CREATE EXTENSION
转储加载成功后才安装。这看起来没什么大不了的,但问题是:是否可以强制 pg_dump
将所有必需的 CREATE EXTENSION foo;
语句写入转储,这样我就不必手动执行此操作?我在 pg_dump
在线文档中没有看到任何选项。
几种可能性:
此数据库已从旧版本升级,其中
CREATE EXTENSION
尚不存在。
有人通过执行 SQL 脚本而不是运行
CREATE EXTENSION
错误地安装了 PostGIS。
您不会转储整个数据库,而是使用
-n
选项将转储限制为某个架构(如果将转储限制为某个架构,则即使扩展架构位于转储的架构中,它也不会转储扩展) .
您可以使用它来转储架构和扩展(在 11.2 上测试):
pg_dump -U postgres -d mydb -s > dump.sql