如何提取Postgres记录数据类型中的节点

时间:2015-11-01 21:29:50

标签: sql postgresql types

我正在使用Postgres 9.1,我有一个使用record函数返回row()数据类型的函数。

举个简单的例子,试试:

select row(1,2,3);

它将返回一个单元格行,其中包含“(1,2,3)”。

在我更复杂的函数中,它返回一个地理编码和其他数据,如:

(90,"Sydney, Australia",0.431951065304161,151.208784,-33.873982)

所以我要做的是弄清楚如何在这个“行”或“数组”中确定每个节点值(无论技术上是否正确)。

任何可以提供帮助的人都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

示例功能:

create or replace function a_function()
returns record language sql as $$
    select 90, 'Sydney, Australia'::text, 0.431951065304161, 151.208784, -33.873982;
$$;

select a_function();

                            a_function                            
------------------------------------------------------------------
 (90,"Sydney, Australia",0.431951065304161,151.208784,-33.873982)
(1 row) 

您应该使用列定义列表调用from子句中的函数:

select *
from a_function() as (id int, city text, num1 numeric, num2 numeric, num3 numeric);

 id |       city        |       num1        |    num2    |    num3    
----+-------------------+-------------------+------------+------------
 90 | Sydney, Australia | 0.431951065304161 | 151.208784 | -33.873982
(1 row) 

答案 1 :(得分:0)

我一直在搜索,我找到了这个文档的答案:

http://www.tutorialspoint.com/postgresql/postgresql_data_types.htm

查看“访问复合类型”。

基本上record数组是一个关联数组(或key =>值对)。

您必须使用密钥名称才能将其从阵列中拉出来。