postgresql - 在同一查询中使用列参数化设置返回函数

标签 postgresql

本质上,我想做的是:

SELECT set_returning_func(id) FROM my_table;

但是,结果将是记录语法中的单列,例如

             set_returning_func              
---------------------------------------------
 (old,17,"August    2, 2011 at 02:54:59 PM")
 (old,28,"August    4, 2011 at 08:03:12 AM")
(2 rows)

我希望将其解压缩到列中。如果我这样编写查询:

SELECT srf.* FROM my_table, set_returning_func(my_table.id);

我收到一条错误消息:

ERROR:  function expression in FROM cannot refer to other relations of same query level

那么,如何获取结果集,同时为返回集的函数提供参数?

最佳答案

我正在寻找的语法是:

SELECT (set_returning_func(id)).* FROM my_table;

详细信息

set_returning_func(id) 是复合类型。正如 * 语法可用于表一样:

SELECT my_table.* FROM my_table, my_other_table

它也可以用于复合值(尽管它们必须括在括号中)。直观上,我们还可以从复合返回函数中选择单个列:

SELECT (set_returning_func(id)).time FROM my_table;

一些返回集合的函数具有标量而不是复合返回类型。在这些情况下,(expr).* 语法没有意义,并会产生错误:

> SELECT (generate_series(1,5)).*;
ERROR:  type integer is not composite

正确的语法很简单:

> SELECT generate_series(1,5);
 generate_series 
-----------------
               1
               2
               3
               4
               5
(5 rows)

关于postgresql - 在同一查询中使用列参数化设置返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337723/

相关文章:

sql - 是否可以进行递归 SQL 查询?

django - 无法在 Django 生产 VPS 上安装 egenix-mx-base

sql - 检查postgresql中逗号分隔列中的逗号分隔字符串

空间+时间参数的Postgresql复合索引

node.js - Node js 应用程序中数据库连接池处理的最佳实践?

postgresql - Postgres 在查询索引表达式 View 时使用错误的索引?

sql - PostgreSQL 删除组上的 null

c# - npgsql 泄漏 Postgres 数据库连接 : Way to monitor connections?

mysql - 对历史上未被认可的 django 进行唯一的约束

json - 如何修改 PostgreSQL JSONB 数据类型中的单个属性值?