PostgreSQL unnest,嵌套字段特定元素的 WHERE 子句
Posted
技术标签:
【中文标题】PostgreSQL unnest,嵌套字段特定元素的 WHERE 子句【英文标题】:PostgreSQL unnest, WHERE clause on specific element of nested field 【发布时间】:2020-07-16 20:50:51 【问题描述】:鉴于下表,我想提取 id
值 WHERE 60 显示为 status
的第二个元素。我看到它是一个嵌套字段。其中,我如何获得第二个元素?
╔════╤════════════════════════════════════════════════╗
║ id │ status ║
╠════╪════════════════════════════════════════════════╣
║ 1 │ "(1234,60,\"2020-02-29 01:18:19.309232\")" ║
╟────┼────────────────────────────────────────────────╢
║ 2 │ "(4567,70,\"2020-02-29 01:18:19.309232\")" ║
╚════╧════════════════════════════════════════════════╝
结果应该是 id = 1
,因为 60 是该行的 status
的第二个元素。
我的同事告诉我值中的不同字段。
user_id
(bigint
)
status
(bigint
)
updated_at
(timestamp
)
【问题讨论】:
"我看到它是一个嵌套字段。" - 它的数据类型到底是什么?看起来不像数组,不像 JSON,更像是自定义的字符串格式。 @Bergi 我不确定它是什么类型。它被称为“user_status_t[]”。不确定那是什么类型。 啊,那是一个很大的不同!user_status_t
将是 custom composite type。请向我们展示它在您的架构中的定义。
谢谢!我的同事告诉我价值中的不同领域。 1st - user_id (bigint), 2nd - status (bigint), 3rd - updated_at (timestamp) 使用你给我看的文档,我现在知道如何访问它了。谢谢!
你可能想post your solution as an answer然后
【参考方案1】:
您可以使用.
访问复合类型的各个元素。因此,对您的(非规范化!)表的查询将是
SELECT id
FROM table_name
WHERE (table_name.status).status = 60;
【讨论】:
以上是关于PostgreSQL unnest,嵌套字段特定元素的 WHERE 子句的主要内容,如果未能解决你的问题,请参考以下文章