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