下面是一个有一个查询的函数,
现在我想转换成动态查询。我想要一个表名参数,以便查询从多个表中返回数据。
请帮助我,我是 PostgreSQL 的新手,在此先感谢!
create or replace function GetEmployees()
returns setof weather as
'select * from weather;'
language 'sql';
下面是一个有一个查询的函数,
现在我想转换成动态查询。我想要一个表名参数,以便查询从多个表中返回数据。
请帮助我,我是 PostgreSQL 的新手,在此先感谢!
create or replace function GetEmployees()
returns setof weather as
'select * from weather;'
language 'sql';
这是基本的 PL/PgSQL。使用带有格式说明符的 PL/PgSQLEXECUTE .. USING
语句和format
函数。%I
create or replace function get_sometable(tablename regclass)
returns setof whatever_type as
BEGIN
RETURN QUERY EXECUTE format('select * from %I";', tablename);
END;
language 'plpgsql';
这仅在您可能传递的所有表名返回兼容的结果类型时才有效,就像分区发生的那样。否则,您必须返回SETOF RECORD
,然后在函数调用中传递表格布局。RECORD
有关 和 的讨论,请参阅文档SETOF RECORD
。
当表类型不兼容但您仍然可以通过合适的列表返回兼容的子集时,请考虑RETURNS TABLE
作为另一种方便的选择。SELECT
如果你正在做表分区,你真的应该按照关于表分区的 PostgreSQL 文档的建议,使用表继承和触发器来做。