我有一个具有多个模式的数据库。我想在所有以"team"开头的模式中运行SELECT * FROM info
。
模式不是固定的,这意味着模式是不断添加和删除的,所以我不能在查询中硬编码模式。但我只对以"团队"开头的模式感兴趣。我该怎么做呢?
如果所有表具有相同的结构,则可以编写一个PL/pgSQL函数来完成以下操作:
create function get_info(p_schema_prefix text)
returns table (... column definitions go here ...)
as
$$
declare
l_rec record;
l_sql text;
begin
for l_rec in select table_schema, table_name
from information_schema.tables
where table_name = 'info'
and table_schema like p_schema_prefix||'%'
loop
l_sql := format('select id, data from %I.%I', l_rec.table_schema, l_rec.table_name);
return query execute l_sql;
end loop;
end;
$$
language plpgsql;
可以这样使用:
select *
from get_info('team')