バグを修正した後、@Pavelが指摘しました 、返品タイプも定義します 適切に、またはすべての呼び出しで列定義リストを提供する必要があります。
この呼び出し:
SELECT * FROM get_object_fields()
...Postgresが*
を展開する方法を知っていることを前提としています 。匿名のレコードを返すため、例外が発生します:
ERROR: a column definition list is required for functions returning "record"
これを修正する(いくつかの)1つの方法は、RETURNS TABLE
を使用することです。 (Postgres 8.4以降):
CREATE OR REPLACE FUNCTION get_object_fields()
RETURNS TABLE (department_id int) AS
$func$
BEGIN
RETURN QUERY
SELECT department_id
FROM fact_department_daily
WHERE report_date = '2013-06-07';
END
$func$ LANGUAGE plpgsql;
SQL関数でも同じように機能します。
関連: