在 Postgres 中将 VARIADIC 参数传递给 IN

Pass VARIADIC argument into IN in Postgres

我正在尝试构建一个 Postgres 函数,它将 table 名称作为可变参数并输出查询,returns select 来自 information_schema 的字符串 like

SELECT *
FROM table1 
UNION 
SELECT *
FROM table2

到目前为止,我做了以下工作:

CREATE OR REPLACE FUNCTION query_tables(VARIADIC list text[])
    RETURNS text
AS $$
DECLARE
    qry TEXT;
BEGIN
    SELECT string_agg(
        format('SELECT *
            FROM %1$I', table_name),
        ' UNION ')
    INTO qry
    FROM information_schema.tables
    WHERE table_schema = 'public'
          AND table_name IN (list);

    return qry;
END;
$$

所以可以这样调用SELECT * FROM query_tables('table1','table2');

但是,我被困在 IN (list),我无法在 IN() 中传递可变参数。

可能吗?

要使用 数组,更改

table_name IN (list)table_name = ANY (list)

https://www.postgresql.org/docs/current/static/functions-comparisons.html

expression operator ANY (array expression)

另外: