PL/Python:如何return一个空集?

PL/Python: How to return an empty set?

我有一个在 int[] 上运行的函数。我希望能够检查数组是否为空,并在这种情况下停止,因为无事可做。

这是我的功能:

CREATE OR REPLACE FUNCTION func2(c integer[])
  RETURNS SETOF func_type AS
$BODY$
result=plpy.execute("SELECT * FROM func1(ARRAY%s)"%c)
return result;
$BODY$
  LANGUAGE plpythonu VOLATILE

func_type定义为:

CREATE TYPE func_type AS
   (x integer,
    y numeric,
    z integer,
    zz integer);

当我添加支票时:

$BODY$
if not c:
    return  

我收到一个错误:

ERROR:  returned object cannot be iterated
DETAIL:  PL/Python set-returning functions must return an iterable object.

我知道我必须 return func_type 并且 func_type 没有构建因为没有 plpy.execute 但是我怎样才能做到 return 在此刻?此外,假设 func3 称为 func2func3 如何检查是否有 0 行 returned?

如果您声明函数 strict 那么它将不会被执行,并且只要它的任何参数是 null

就会 return null

http://www.postgresql.org/docs/current/static/sql-createfunction.html

如果传递的数组为空,而您想要 return 一个空集,那么 return 一个空数组:

create or replace function func2(c integer[])
  returns setof func_type as
$body$

if not c:
    return []

$body$ language plpythonu;

select * from func2(array[]::int[]);
 x | y | z | zz 
---+---+---+----
(0 rows)