我已经动态生成了 SELECT。我尝试将结果作为 SETOF RECORD 返回。像这样:
CREATE FUNCTION test(column_name text) RETURNS SETOF RECORD AS $$
DECLARE
row RECORD;
BEGIN
FOR row IN EXECUTE 'SELECT ' || quote_ident(column_name) || ' FROM dates'
LOOP
RETURN NEXT row;
END LOOP;
RETURN;
END;
$$ LANGUAGE 'plpgsql';
当我尝试:
SELECT * FROM test('column1');
我明白了:
ERROR: a column definition list is required for functions returning "record"
我知道 column1 是整数类型:
SELECT * FROM test('column1') f(a int);
结果是正确的,因为我知道这将是整数类型。
当我尝试:
SELECT * FROM test('column1') f(a varchar);
我得到错误:
ERROR: wrong record type supplied in RETURN NEXT
DETAIL: Returned type integer does not match expected type character varying in column 1.
现在我的问题是:如何摆脱我定义类型'f(a int)'的部分查询。它应该是可行的,因为 Postgres 知道返回的类型。我尝试使用 IMMUTABLE 选项,但没有成功。