PostgreSQL函数:将setof tablename作为变量返回

时间:2014-09-05 16:42:28

标签: postgresql postgresql-9.1

我有这个功能:

CREATE OR REPLACE FUNCTION remote (_table_name text)
  RETURNS SETOF my_table AS
$func$
DECLARE
   sql text := format('SELECT * FROM %s WHERE id = 1', _table_name);
BEGIN
   RETURN QUERY EXECUTE sql
   USING _table_name;
END
$func$ LANGUAGE plpgsql;

select * from remote('my_table')

但我希望有一个动态的RETURNS SETOF _table_name

如果我这样做,我会收到此错误:

ERROR:  type "_table_name" does not exist

我怎样才能做到这一点?

非常感谢

1 个答案:

答案 0 :(得分:0)

在这里找到答案:Refactor a PL/pgSQL function to return the output of various SELECT queries

CREATE OR REPLACE FUNCTION get_remote(_table_name anyelement)
  RETURNS SETOF anyelement AS
$func$
DECLARE
   sql text := format('SELECT * FROM %s WHERE id = 1', pg_typeof(_table_name));
BEGIN
   RETURN QUERY EXECUTE sql
   USING _table_name;
END
$func$ LANGUAGE plpgsql;

select * from get_remote(NULL::my_table)

虽然这是一个棘手的问题......