如何投实体中的PostgreSQL设置(How to cast entity to set in P

2019-10-22 09:21发布

使用的是Postgres 9.3,我发现我可以这样执行的东西:

SELECT generate_series(1,10);

但我不能这样做:

SELECT (SELECT generate_series(1,10));

我能以某种方式投SELECT结果setof int以相同的使用它作为结果从generate_series()

究竟是什么发生的事情,为什么我可以从使用结果从功能,但不SELECT

Answer 1:

你的第一种形式的Postgres的一个非标准的功能。 它允许SRF(组返回功能)在SELECT列表,其扩展到多行:

  • 有什么样PostgreSQL中的zip()函数,结合两个阵列?

注:这是工作的功能 ,而不是子选择。 这就是为什么你的第二个SELECT是根本无效的语法。

标准SQL不有专门的规定,在所有的,因此该功能在一些干净的替代品皱起了眉头已经提供(感谢在SQL标准的改进)。 这在很大程度上是由取代LATERAL Postgres里9.3+功能:

  • 什么是横向和PostgreSQL中子查询的区别?

简单的形式可以被代替:

SELECT g
FROM   generate_series(1,10) g;

只要有可能移动到SRF的FROM子句和对待他们像表-自9.3版本几乎总是可能的。

需要注意的是g在实施例自动用作表列别名。 gSELECT g结合至列名第一。 更明确的语法:

SELECT g
FROM   generate_series(1,10) AS t(g);  -- table_alias(column_alias)

你需要了解一 ,一组行 (〜表)和阵列之间的差异。 这将使你的整数数组

SELECT ARRAY(SELECT g FROM generate_series(1,10) g) AS g_arr;

浏览标签产生系列和设置返回函数与代码示例许多相关的答案。



文章来源: How to cast entity to set in PostgreSQL