postgresql - 如何在 Postgres 中将一个类型拆分为多个列?

标签 postgresql plpgsql plperl

我有以下代码从 pl/python 返回多个值:

CREATE TYPE named_value AS (
  name   text,
  value  integer
);
CREATE or replace FUNCTION make_pair (name text, value integer)
  RETURNS named_value
AS $$
  return [ name, value ]
$$ LANGUAGE plpythonu;

select make_pair('egg', 4) as column;

输出是:

column
(egg,4)

我想要做的是将输出分成两个单独的列。像这样:

column, column2
egg, 4

我该怎么做?在谷歌上搜索了 1 小时,我一无所获。所以我希望我在最后添加一些搜索关键字: 多个返回值 多个结果 多列 unnest list unnest set

最佳答案

是的,这个语法有点古怪,需要额外的括号:

select (make_pair('egg', 4)).name

要在只调用一次函数的同时从输出中获取多个组件,您可以使用子选择:

select (x.column).name, (x.column).value from (select make_pair('egg', 4) as column) x;

关于postgresql - 如何在 Postgres 中将一个类型拆分为多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866321/

相关文章:

database - PostgreSQL:需要在从文件复制还是从标准输入复制之间进行选择

Python:插入字符串时格式错误的数组文字

postgresql - 如果 X 到 Y 的距离已经存在,保证表永远不会存储从 Y 到 X 的距离

arrays - Postgres SQL 函数转换可以应用于数组类型吗?

postgresql - PL/Perl 触发器不能使用 .bashrc 中定义的 ENV 变量

postgresql - 创建语言 plperlu;尽管安装了 postgresql-plperl-12,但仍然失败

sql - 将多个表合并在一起,正确的连接类型?

PostgreSQL 触发器和临时表

sql - 为什么 postgresql 考虑这个子查询列名不完全限定且不明确

perl - PostgreSQL 是否会持续加载其 pl* 解释器?