【发布时间】:2020-02-14 08:04:30
【问题描述】:
如果我创建一个函数f 来查询一个函数,我认为如果返回类型是表的名称而不是RETURNS TABLE(id integer, name text),那么它会更容易阅读。
CREATE TABLE users ( id integer, name text );
CREATE OR REPLACE FUNCTION f()
RETURNS users
AS $$
SELECT * FROM users
WHERE FALSE
$$
LANGUAGE SQL;
但是当函数中的查询返回零行时,我得到了奇怪的结果。
SELECT * FROM f();
预期结果
+------+--------+
| id | name |
|------+--------|
+------+--------+
实际结果
+--------+--------+
| id | name |
|--------+--------|
| <null> | <null> |
+--------+--------+
如果有更多列,它们仍然都是null。如果函数中的查询返回任何行,则它按预期工作。如果我使用 RETURNS TABLE(...) 语法,我不会出现这种行为。
有没有办法解决这个问题?
我使用的是 PostgreSQL 9.6
【问题讨论】:
标签: postgresql set-returning-functions