gpt4 book ai didi

java - 如何使用 JDBC 在 PostgreSQL 中传递一组复合类型 (UDT)

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:54 27 4
gpt4 key购买 nike

我们正在从 Oracle 迁移到 PostgreSQL Enterprise DB,我们有一个接受类表结构的存储过程。我们将 STRUCT 与 Oracle 一起使用,效果非常好。现在这个表在 PostgreSQL 中配置为包含其他 UDT-s 表的 UDT,并且它在从 PostgreSQL 层调用时工作。

我找不到关于如何使用 PostgreSQL JDBC 驱动程序将复合类型作为复合类型集合或复合类型数组传递的适当支持或文档。

我能够通过传递 PGobject 的实现来调用该过程。我的 getValue() 方法将对象数据转换为以下格式的字符串:

{row(key,1596156006),row(dataHeader2TDataHeader,2782),row(identifier01,20373833), ...}

但是我从 PostgreSQL 收到错误“格式错误的数组文字”。

PostgreSQL版本为9.3.1,JDK 1.6,JBoss 3.2.8

最佳答案

在 PostgreSQL 中基本上有几个选项:

  1. 创建您自己的字符串表示并使用 C、pl/perl、pl/pgsql 或类似语言编写解析器。

  2. 使用 ROW() 和 ARRAY[] 构造函数,或者

  3. 使用原始数据格式。

  4. JSON(但这有限制!)

如果您要编写自己的字符串表示形式,则需要密切注意它是如何在输入和输出上进行解析的。您甚至可以创建自己的类型而不使用复合类型。这在确保您始终了解输入和输出公式方面有一些有用的好处。

ROW() 和 ARRAY[] 构造函数可以一起使用。在这种情况下,您可能会:

 ARRAY[ROW(1, 'foo')::bar, ROW(2, 'baz'), ROW(3, 'foobar,')]

最后是原始数据格式。它们使用嵌套的 CSV(包括双引号),其中 {csv} 表示一个数组,(csv) 表示一行。上面是这样的:

 '{"(1,foo)","(2,baz)","(3,""foobar,"")"}'

关于java - 如何使用 JDBC 在 PostgreSQL 中传递一组复合类型 (UDT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20154491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com