我在模式中有一组表(约100个)qgep,名称为,名称以开头vl_。它们具有相同的列(colA,colB,colC)。
qgep
vl_
我想做的就是得到一个大表,该表是我所有vl_*表的并集,还有一个带有原始表名称的列。
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吗?
EXECUTE
WITH ... UNION ALL
继承对我有帮助吗? 是否可以知道记录在哪个类中select?
select
解决方案的确是使用继承,我终于在Postgres doc上找到了解决方案。
SELECT p.relname, vl.* FROM qgep.is_value_list_base vl, pg_class p WHERE vl.tableoid = p.oid;