在postgres(plpgsql)中,如何创建一个在变量table_name上返回select*的函数?

A Q*_*ker 1 postgresql plpgsql

基本上,至少为了概念验证,我想要一个我可以运行的函数:SELECT res('table_name'); 这将给我SELECT*FROM table_name;的结果.我遇到的问题是架构......在我所拥有的函数的声明中:

创建或替换功能res(table_name TEXT)返回设置此THEPISEPEPROBLEM AS

问题是我不知道如何声明我的返回,因为它要我指定一个表或一个模式,在实际运行该函数之前我不会这样做.

有任何想法吗?

rud*_*ore 7

您可以这样做,但如前所述,您必须在SELECT查询中添加列定义列表.

CREATE OR REPLACE FUNCTION res(table_name TEXT)  RETURNS SETOF record AS $$
BEGIN
  RETURN QUERY EXECUTE 'SELECT * FROM ' || table_name;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)


SELECT * FROM res('sometable') sometable (col1 INTEGER, col2 INTEGER, col3 SMALLINT, col4 TEXT);
Run Code Online (Sandbox Code Playgroud)

  • +1有用的答案.值得一提的是`return query execute`是8.4还是以上? (2认同)