在 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)
另外:
我正在尝试构建一个 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)
另外: