【发布时间】:2014-01-20 23:24:54
【问题描述】:
这个查询工作正常,
WITH test AS (
SELECT array_agg(t) as x FROM (
SELECT 1111 as id, 'aaaaa' as cc
) AS t
) SELECT x[1] FROM test;
但是,我可以访问记录元素吗?我试试SELECT x[1].id; SELECT x[1][1]; ...没有任何作用。
PS:对于 Google,我们只看到旧的解决方案...这里的上下文是 v9.X,没有关于“记录数组”的消息?
我也试试
select x[1] from (select array[row(1,2)] as x) as t;
没有解决方案只能访问第 1 项或仅访问第 2 项。
我无法理解的线索:postgresql.1045698.n5.nabble.com 使用CREATE TYPE 解决问题... 好的,但我需要“全部在查询中”的解决方案。 PostgreSQL 的“动态类型”在哪里?如何在没有CREATE TYPE 子句的情况下转换或表达类型?
【问题讨论】:
-
您可以将值转换为
hstore并从中获取字段,但这并不是您真正想要的。 PostgreSQL 的record伪类型有点受限 - 特别是,没有匿名记录转换,例如CAST(somerecord AS t(x integer, y text))不起作用。 -
顺便说一句,如果这是您想要的,您需要对此发出声音,并且可能会以愿意做实际工作和/或为开发时间做出贡献的意愿来支持这种声音。这是类型系统的一个角落,没有人真正热衷于处理它,所以你需要足够关心自己来实现它,或者想办法让别人足够关心来处理它。
-
你有更多的上下文吗?可能还有另一种方法可以到达您需要的地方。
-
抱歉@Mu,我们不需要“更多上下文”,这是 PostgreSQL 的句法矛盾......我认为 Craig 证实了我对 pg9.X 的欺骗:没有消息。
-
@PeterKrauss 它是开源的。如果您做出贡献,您就是利益相关者 - 无论是帮助列表或此处的人、详细设计、错误搜索和报告、错误修复、代码清理、功能贡献、补丁审查等。我建议您参与并做出贡献想要被听到。 (另外,请不要说“9.x” - 9.0、9.1、9.2,......都是主要版本。是的,这很愚蠢,但我们坚持下去)。你关心这件事——其他人关心双向复制,其他人关心行级安全性和多租户,......制造噪音,被听到,做出贡献。
标签: arrays postgresql record