0

假设您有许多具有相同列和某种命名约定的 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
4

1 回答 1

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>
于 2013-08-26T14:55:19.963 回答