使用命名约定加入Postgresql表

时间:2013-08-26 14:12:24

标签: postgresql

假设您有许多具有相同列和某种命名约定的Postgresql表。

tablename_descriptor:        tablename_anotherdescriptor:      tablename_descriptor3:  
ID         VALUE             ID           VALUE                ID        VALUE
1          val1              1            val4                 1         val7
2          val2              2            val5                 2         val8
3          val3              3            val6                 3         val9

有没有办法加入名称以“tablename”开头的所有表?给出结果

tablename:
ID       VALUE
1        val1
2        val2
3        val3
4        val4
5        val5
6        val6
7        val7
8        val8
9        val9

1 个答案:

答案 0 :(得分:0)

这是一些动态SQL,您可以执行这些结果来获取各种表UNION ALL'。

SELECT string_agg('select row_number() over () as rn,value from ' || tablename,' union all ')
FROM pg_catalog.pg_tables
WHERE schemaname = 'public'
AND tablename ~* E'tablename\\_descriptor';

1)。 row_number()只是为了给你一个ID(或者你可以提供序列等)。

2)。如果您使用命令行工作,则可以在一个psql会话中执行此查询并将其传递给另一个会话以获取生成的查询的结果。

例如

psql -U <youruser> -d <yourdb> -qtAc "<the query>" | psql -U <youruser> -d <yourdb>