如何查询 Postgres `RECORD` 数据类型
How to query a Postgres `RECORD` datatype
我有一个查询,它将 return 行作为来自子查询的 RECORD
数据类型 - 参见下面的示例:
select *
from (
select row(st.*) table_rows
from some_table st
) x
where table_rows[0] = 339787
我试图在 WHERE
子句中进一步限定它,我需要通过提取 returned RECORD
数据类型中的一个节点来这样做。
当我执行上述操作时,我收到一条错误消息:
ERROR: cannot subscript type record because it is not an array
有人知道实现这个的方法吗?
使用(row).column_name
。您可以只参考 table 本身来创建记录:
select *
from (
select r
from some_table r
) x
where (r).column_name = 339787
稍后创建一个与您选择的别名同名的列的可能性很小,并且上述查询将失败,因为 select r
将 return 稍后创建的列而不是记录。第一个解决方案是像您在问题中所做的那样使用 row
构造函数:
select row(r.*) as r
第二种解决方案是使用 table 的架构限定名称:
select my_squema.some_table as r
或者你可以试试这个
select *
from (
select *
from tbl
) x
where x.col_name = 339787
我有一个查询,它将 return 行作为来自子查询的 RECORD
数据类型 - 参见下面的示例:
select *
from (
select row(st.*) table_rows
from some_table st
) x
where table_rows[0] = 339787
我试图在 WHERE
子句中进一步限定它,我需要通过提取 returned RECORD
数据类型中的一个节点来这样做。
当我执行上述操作时,我收到一条错误消息:
ERROR: cannot subscript type record because it is not an array
有人知道实现这个的方法吗?
使用(row).column_name
。您可以只参考 table 本身来创建记录:
select *
from (
select r
from some_table r
) x
where (r).column_name = 339787
稍后创建一个与您选择的别名同名的列的可能性很小,并且上述查询将失败,因为 select r
将 return 稍后创建的列而不是记录。第一个解决方案是像您在问题中所做的那样使用 row
构造函数:
select row(r.*) as r
第二种解决方案是使用 table 的架构限定名称:
select my_squema.some_table as r
或者你可以试试这个
select *
from (
select *
from tbl
) x
where x.col_name = 339787