admin

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

sql

我在模式中有一组表(约100个)qgep,名称为,名称以开头vl_。它们具有相同的列(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。您对寻找什么有任何建议吗?有什么我可以做的WITH ... UNION ALL吗?

继承对我有帮助吗? 是否可以知道记录在哪个类中select


阅读 39

收藏
2021-06-07

共1个答案

admin

解决方案的确是使用继承,我终于在Postgres doc上找到了解决方案。

SELECT p.relname, vl.* 
FROM qgep.is_value_list_base vl, pg_class p 
WHERE vl.tableoid = p.oid;
2021-06-07