如何将 Postgresql 数据库导出为可以在其他 pgAdmin
中执行的 SQL?
- 导出为备份文件,版本不同时不起作用
- 导出为 SQL 文件,尝试在不同的
pgAdmin
上运行时不执行
我尝试使用 pgAdmin III
导出数据库,但是当我尝试在其他 pgAdmin
中执行 SQL 时,它在 SQL 中抛出错误,当我尝试“恢复”时一个备份文件,它说版本不同,无法导入/恢复。
那么有没有一种“安全”的方法可以将数据库导出到标准 SQL 中,无论它是哪个版本,都可以在 pgAdmin
SQL 编辑器中简单地执行?
最佳答案
不要为此尝试使用 PgAdmin-III。如果可能,直接使用 pg_dump
和 pg_restore
。
使用来自目标服务器的 pg_dump
版本来转储源服务器。因此,如果您要从(比如说)8.4 升级到 9.2,您将使用 9.2 的 pg_dump
来创建转储。如果您创建一个 -Fc
自定义格式转储(推荐),您可以使用 pg_restore
将它应用到新的数据库服务器。如果您进行了常规 SQL 转储,则可以使用 psql
来应用它。
参见 the manual on upgrading your PostgreSQL cluster .
现在,如果您要降级,那就完全是一团糟了。
您将很难创建可在 任何 PostgreSQL 版本中运行的 SQL 转储。假设您创建了一个使用 WITH
查询的 VIEW。这在恢复到 PostgreSQL 8.3 时不起作用,因为它不支持 WITH
。还有很多其他的例子。如果您必须支持旧的 PostgreSQL 版本,请在您仍然支持的最旧版本上进行开发,然后导出它的转储以供加载新版本。您不能理智地在新版本上开发并导出旧版本,即使有也不会很好地工作。
更麻烦的是,在旧版本上开发并不总能为您提供适用于新版本的代码。有时会在引入对新规范功能的支持的地方添加新关键字。有时,问题的解决方式会影响用户代码。例如,如果您要在(古老且不受支持的)8.2 上进行开发,则在 8.3 及更高版本上隐式转换为文本时会遇到很多问题。
最好的办法是在所有支持的版本上进行测试。考虑使用 Jenkins CI 之类的工具设置自动化测试。是的,这很痛苦,但这是随着时间的推移而改进的软件的价格。如果 Pg 保持完美的向后和向前兼容性,它永远不会改进。
关于sql - 使用 PostgreSQL 的 PgAdmin-III 导出数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16784598/