Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:使用动态名称的多个表的并集_Sql_Postgresql_Information Schema - Fatal编程技术网

PostgreSQL:使用动态名称的多个表的并集

PostgreSQL:使用动态名称的多个表的并集,sql,postgresql,information-schema,Sql,Postgresql,Information Schema,我在模式中有一组表(大约100个),名为qgep,它们的名称以vl\ucode>开头。 它们有所有相同的列(colA、colB、colC) 我想做的是得到一个大表,它是我所有vl.*表的并集,还有一列是原始表的名称。 我可以得到表的列表: SELECT table_name FROM information_schema.tables WHERE table_schema = 'qgep' AND table_name LIKE 'vl_%' 我发现解决问题的唯一方法是生成SQ

我在模式中有一组表(大约100个),名为
qgep
,它们的名称以
vl\ucode>开头。
它们有所有相同的列(colA、colB、colC)

我想做的是得到一个大表,它是我所有
vl.*
表的并集,还有一列是原始表的名称。

我可以得到表的列表:

SELECT table_name
  FROM information_schema.tables 
  WHERE table_schema = 'qgep' 
  AND table_name LIKE 'vl_%'
我发现解决问题的唯一方法是生成SQL命令以进一步执行:

SELECT
  string_agg(
    'SELECT '''
    ||table_name
    ||''' AS table_name, colA, colB, colC FROM qgep.'
    ||table_name
  , ' UNION ')::text 
FROM information_schema.tables 
  WHERE table_schema = 'qgep' 
  AND table_name LIKE 'vl_%'"
然后执行这个SQL命令将输出我想要的内容。虽然,这是非常没有表现,相当丑陋

我希望避免使用
EXECUTE
。 你有什么建议吗? 我可以用
和。。。联合所有人


继承能帮我吗?是否有可能知道在
选择中记录来自哪个类?

解决方案确实是使用继承,我最终在上找到了解决方案

create or replace function uall() returns table ( code integer ,
  value character varying(50),
  active boolean,tablename text ) AS $$ 
declare
  _i int;
  _r record;
  _t text := '';
begin 
  select distinct string_agg($s$select *,'$s$||table_name||$s$' from $s$||table_name,' union all ') into _t from information_schema.tables where table_name like 'vl_%';
return query execute _t;
end;$$ language plpgsql
;

select * from uall()

它们有所有相同的列(colA、colB、colC)。
向所有列添加一个列
col_X
,所有列都具有不同的值,并将这些表合并到一个大表中。动态sql仅适用于execute(或shell脚本:)我在脚本中使用它。不管怎样,我希望找到一个更好的方法。也许可以学一点。为什么要一次查询100个表?每个表都列出了值列表(选择组合框)的可能选项,并且选项以多种语言列出。我想生成一张大桌子作为一个决策者。非常感谢您的帮助。我想避免使用execute。我终于找到了使用继承的解决方案。
SELECT p.relname, vl.* 
FROM qgep.is_value_list_base vl, pg_class p 
WHERE vl.tableoid = p.oid;