【问题标题】:ERROR: COPY escape must be a single one-byte character (multi-delimiter appears to work on Postgres 9.0 but does not on Postgres 9.2)错误:COPY 转义必须是单个单字节字符(多分隔符似乎适用于 Postgres 9.0,但不适用于 Postgres 9.2)
【发布时间】:2019-11-13 23:49:42
【问题描述】:

我有一个 Talend 企业工作,通过 COPY 命令将数据加载到 PostgreSQL 数据库中。迁移到新服务器时,此命令失败并显示以下错误消息:org.postgresql.util.PSQLException:ERROR: COPY escape must be a single one-byte character

问题是,我查看了 Postgres 9.0 和 9.2 的文档。两个文档都说不允许使用多字节分隔符。所以我很困惑为什么这项工作在 Postgres 9.0 上完美运行,但在 9.2 上却不行。

我无法编辑此 Talend 作业,因为它非常旧,而且我们不再拥有该作业的源代码。我无法看到实际的分隔符是什么。我也无法确切地看到COPY 命令是如何运行的,例如它是否通过 Postgres 驱动程序直接推送到服务器,或者它是否在某处创建了一个临时 CSV 文件,然后将数据加载到服务器中。我相信我们设置多字节分隔符的原因是由于在多个表的一些列中使用了各种特殊字符。

我不知道对旧 9.0 Postgres 服务器的源代码进行了任何编辑。

我们迁移服务器的原因是由于 CentOS 5 的生命周期结束。新服务器运行 CentOS 7。我相信两台服务器都使用默认 CentOS 存储库中的默认 Postgres 版本。我确信 CentOS 7 服务器确实在运行默认的 Postgres 版本,因为我自己通过 yum 安装了它。

任何帮助将不胜感激。

另外,有没有办法将旧的 Postgres 服务器、依赖项和可执行文件复制到我们的新服务器,以防源被修改?

【问题讨论】:

  • 你能看到在 pg_stat_activity 中运行的查询吗?这应该有助于弄清楚分隔符是什么,这可能有助于缩小问题范围。
  • PostgreSQL 9.0 中已经存在该错误消息,因此版本更改不是问题。不要使用 PostgreSQL 9.2。

标签: java postgresql talend


【解决方案1】:

我找到了问题的答案。显然,我们使用的 Talend 版本和包含的 Postgres 驱动程序存在错误。

唯一的解决方案是通过下载源代码并针对 CentOS 7 库进行编译,在我们的 CentOS 7 机器上安装 Postgres 9.0。

可以在这里找到错误:Talend Bug

【讨论】:

  • 直接从源代码安装 postgresql 总是一个好主意。如果 talend 未配置为使用 9.x 数据库,则 JDBC 会在 PG 11 上出现问题。
猜你喜欢
  • 1970-01-01
  • 2016-06-23
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多