Postgres 将表声明为函数的参数?

spi*_*edd 3 postgresql plpgsql

我想创建一个对表进行操作的函数,例如

create or replace function test(t table) 
    returns void language plpgsql as
$func$
begin   
    select * from t limit 10;
end;
$func$
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用任何表名调用该函数,例如

select test(myTable);
Run Code Online (Sandbox Code Playgroud)

我该怎么做这样的事情?

Erw*_*ter 5

您不能将表声明为函数参数本身,因为 Postgres 中没有表变量。但是有多种方法可以实现您可能想要实现的目标 - 目前尚不清楚。

您可以“传递”一个表...

  1. ...表名称(类型textname) - 特别是当表可能实际上不存在时(尚):

  2. ...对象标识符(类型regclass):

  3. anyelement...使用多态性概念的表的行类型(type ):

通常,您最终会在函数中使用动态 SQL。警惕 SQL 注入向量。有关的:

返回类型取决于您的输入以及您想要实现的目标......