小编AmS*_*gar的帖子

在SELECT语句中将函数应用于数组的每个元素

我列出了PostgreSQL模式的所有函数,并且需要函数的每个参数的人类可读类型.表示为数组的类型的OID proallargtypes.我可以删除数组并应用format_type()它,这会导致查询分成多个行,用于单个函数.为了避免这种情况,我必须再次为argtypes 创建一个外部SELECT,GROUP因为,显然,无法对unnested数组进行分组.所有列都依赖于proname,但我必须列出GROUP BY子句中的所有列,这是不必要的,但是proname 不是主键.

有没有更好的方法来实现我的输出目标:

proname | ...   | protypes
-------------------------------------
test    | ...   | {integer,integer}
Run Code Online (Sandbox Code Playgroud)

我目前正在使用此查询:

SELECT
          proname,
          prosrc,
          pronargs,
          proargmodes,
          array_agg(proargtypes), -- see here
          proallargtypes,
          proargnames,
          prodefaults,
          prorettype,
          lanname
FROM (
        SELECT
          p.proname,
          p.prosrc,
          p.pronargs,
          p.proargmodes,
          format_type(unnest(p.proallargtypes), NULL) AS proargtypes, -- and here
          p.proallargtypes,
          p.proargnames,
          pg_get_expr(p.proargdefaults, 0) AS prodefaults,
          format_type(p.prorettype, NULL) AS prorettype,
          l.lanname
        FROM pg_catalog.pg_proc p
        JOIN pg_catalog.pg_language l
        ON l.oid = p.prolang
        JOIN pg_catalog.pg_namespace n …
Run Code Online (Sandbox Code Playgroud)

arrays postgresql select

1
推荐指数
1
解决办法
1137
查看次数

标签 统计

arrays ×1

postgresql ×1

select ×1