sql - 使用 PostgreSQL 的 PgAdmin-III 导出数据库

标签 sql postgresql export database-backups pgadmin

如何将 Postgresql 数据库导出为可以在其他 pgAdmin 中执行的 SQL?

  • 导出为备份文件,版本不同时不起作用
  • 导出为 SQL 文件,尝试在不同的 pgAdmin 上运行时不执行

我尝试使用 pgAdmin III 导出数据库,但是当我尝试在其他 pgAdmin 中执行 SQL 时,它在 SQL 中抛出错误,当我尝试“恢复”时一个备份文件,它说版本不同,无法导入/恢复。

那么有没有一种“安全”的方法可以将数据库导出到标准 SQL 中,无论它是哪个版本,都可以在 pgAdmin SQL 编辑器中简单地执行?

最佳答案

不要为此尝试使用 PgAdmin-III。如果可能,直接使用 pg_dumppg_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/

相关文章:

intellij-idea - 如何导出intellij项目

php - Mysql从两个表中选择组相似的行

mysql - 实现图树的最佳数据库结构

sql - 如何正确使用 WHERE 子句?

postgresql 9.6 使用我所有的 ram

ios - 外部MD5ing算作 "encryption"吗?

mysql - 在 SQL 命令中使用浮点型值

mysql - 这是有效的 SQL 条件表达式还是 MySQL 错误(功能)?

sql - 连接来自不同数据库的表 (PostgreSQL)

php - 避免使用 PHP 为文件 XLS 中继服务请求 Url 太长