如何查询Postgres`RECORD`数据类型

时间:2016-08-09 22:46:34

标签: sql postgresql postgresql-9.1 sqldatatypes

我有一个查询,它会从子查询中返回一行RECORD数据类型 - 例如见下面:

select *
from (
    select row(st.*) table_rows
    from some_table st
) x
where table_rows[0] = 339787

我正在尝试在WHERE子句中进一步限定它,我需要通过提取返回的RECORD数据类型中的一个节点来实现这一点。

当我执行上述操作时,我收到错误消息:

ERROR:  cannot subscript type record because it is not an array

有人知道实现这个的方法吗?

2 个答案:

答案 0 :(得分:3)

使用(row).column_name。您只需参考表格本身即可创建记录:

select *
from (
    select r
    from some_table r
) x
where (r).column_name = 339787

稍后创建一个与您选择的别名同名的列的可能性很小,而上述查询将失败,因为select r将返回后面创建的列而不是记录。第一个解决方案是使用row构造函数,就像在问题中一样:

select row(r.*) as r

第二种解决方案是使用表的模式限定名称:

select my_squema.some_table as r

答案 1 :(得分:0)

或者你可以尝试这个

select *
from (
    select *
    from tbl
) x
where x.col_name = 339787