首页 > 解决方案 > 从 postgresql 函数返回 UDT 作为单个参数

问题描述

我正在尝试编写一个函数,该函数返回由用户定义类型的单列组成的记录,以便我可以使用该ResultSet.getObject(int colNumber, Class<T> class)方法在 java 中摄取它们。如果我的函数返回多于一列,它会按预期工作,但如果我的函数只有一列,那么它将 UDT 扩展回其组成部分,这样我就无法使用所需的方法。例如

create type test as (x int, y int);

create or replace function test()
returns table(test test)
as $$
    select (42, 7)::test;
$$ language sql;

create or replace function test2()
returns table(test test, junk boolean)
as $$
    select (42, 7)::test, false;
$$ language sql;

运行test2()以我可以通过所需方法摄取但不能摄取的格式为我提供数据test()。如何指定 test 的返回值以获得所需的结果?

postgres=# select * from test2();
  test  | junk 
--------+------
 (42,7) | f
(1 row)

postgres=# select * from test();
 x  | y 
----+---
 42 | 7
(1 row)

我想要的是...

postgres=# select * from test();
  test   
--------
 (42,7)
(1 row)

标签: postgresqluser-defined-types

解决方案


我认为 * 是问题所在。我们为每一列使用星号。

select test()

用这个。


推荐阅读