【问题标题】:Syntax error when trying to import database from two PostgreSQL databases尝试从两个 PostgreSQL 数据库导入数据库时​​出现语法错误
【发布时间】:2013-05-10 01:08:08
【问题描述】:

我正在尝试从一台服务器导出数据库并使用 phpPgAdmin 将其放在另一台服务器上。我的流程是这样的:

  1. 选择服务器 1 中的数据库并点击导出按钮
  2. 选择“数据和结构”并在下拉菜单“复制”中选择选项
  3. 下载
  4. 在服务器 2 中创建一个与服务器 1 中的数据库同名的同名数据库
  5. 选择该数据库,打开 SQL 窗格,然后粘贴我从服务器 1 下载的 SQL 代码
  6. 执行

那是我得到错误的时候:

ERROR:  syntax error at or near "OWNED"
LINE 73: ALTER SEQUENCE address_customer_id_seq OWNED BY address.cust...

第 73 行全文如下:

 ALTER SEQUENCE address_customer_id_seq OWNED BY address.customer_id;

我读过here,这可能是因为我的两台服务器上的 postgre 版本略有不同。所以我咨询了服务器技术人员,他们说,是的,有这个问题。所以他升级了服务器 2。但是我遇到了同样的错误。

知道会发生什么吗?

非常感谢。

【问题讨论】:

  • 目标数据库是旧版本吗?您提到的两个版本“略有不同”是什么?使用了哪些 pg_dump 和 pg_restore 版本?
  • @CraigRinger 感谢您的帮助。我不得不向服务器管理员提出这些问题,但我会尽快发布答案。
  • SELECT version() 在两台服务器上,pg_dump --version 在用于进行转储的机器上。见stackoverflow.com/tags/postgresql/info。猜测您或您的服务器管理员对“略有不同”的版本感到困惑,并假设(例如)9.2 和 9.1 是 100% SQL 级别兼容的。
  • @CraigRinger 服务器 1:x86_64-redhat-linux-gnu 上的 PostgreSQL 8.4.13,由 GCC gcc (GCC) 4.4.6 编译 20120305 (Red Hat 4.4.6-4),64 位--- 服务器 2:x86_64-redhat-linux-gnu 上的 PostgreSQL 8.1.23,由 GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52) 编译。啊!你是对的!
  • rofl。确实是“略有不同的版本”。 postgresql.org/support/versioning 。 8.1 分支于 2005 年发布,8.4 于 2009 年发布。恭喜你实际运行了最新的 8.1,不过,几乎没有坚持旧版本的人跟上补丁的发布。

标签: sql postgresql import phppgadmin


【解决方案1】:

PostgreSQL 8.4 不会生成恢复到 8.1 的转储,因为它将使用 8.1 中不存在的特性和语法。

可能可以通过对 8.4 数据库运行 8.1 的 pg_dump 来降级,但转储很可能会失败。

降级那么远将是一个挑战,并且可能涉及手动编辑 8.4 的 pg_dump 生成的转储以使其与 8.1 兼容。

8.1 是古老且不受支持的;它的最终生命周期结束版本是在 2010 年 11 月。您甚至不应该考虑将它用于任何新项目或工具,并且确实需要计划升级。

请参阅the PostgreSQL version policy 了解这些版本的不同之处。您可以通过阅读 8.2.0、8.3.0 和 8.4.0 版本的 release notes 了解更多信息。重要的是要了解应用程序可见的行为更改在每个版本中都存在;您必须测试您的应用程序,并且可能需要启用一些向后兼容性设置。

您还应该阅读upgrading a PostgreSQL cluster 文档,但请注意pg_upgrade 不能用于 升级早于 8.4 的版本。

如果您的安装没有过时七年,这一切都会变得不那么痛苦。

【讨论】:

  • 很好的信息。谢谢你。另一方面,升级到 8.4.13 是否更容易?从如此过时的版本升级到最新版本是否存在损坏数据的风险?
  • 服务员说:“因为打了补丁,所以数字不准确。数字不一样,因为一个服务器是CentOS 5,另一个是CentOS 6”。
  • 有这个区别,有可能他是正确的,这两台机器实际上运行的版本与SELECT version()报告的不同?
  • @thomas 好吧,CentOS 5 已经过时了,而且也已经报废了。我不知道您所说的“版本已修补”是什么意思。自制的反向移植修复,也许吧?这些问题需要您的服务器管理员来回答,而不是我。我只能告诉你,即使你的“新”版本已经过时了,你确实需要计划对你的环境进行更新。
  • @thomas 答案更新了更多关于升级的信息。真的,这不是什么好的整洁的罐头答案,尤其是在这样一个旧的并且可能是自定义补丁的环境中。也许你应该看这里:postgresql.org/support/professional_support? (根据我的个人资料,我在一家上市公司工作)。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2012-03-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多