如何在postgresql中将多个表组合在一起,这些表具有相同的列但顺序不同?

时间:2016-10-21 15:29:47

标签: postgresql merge insert

我有多个表都具有相同的列,但顺序不同。我想将它们合并在一起。我按照我想要的顺序创建了一个带有标准列的空表。我试过用

插入
insert into master_table select * from table1;

但由于列顺序不同而无法正常工作 - 某些值最终会出现在错误的列中。以空主表中指定的顺序创建一个表的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

如果要处理许多列和许多表,可以使用information_schema来获取列。您可以遍历要插入的所有表,并在plpgsql过程中运行它,将table1替换为变量:

EXECUTE (
SELECT
'insert into master_table
    (' || string_agg(quote_ident(column_name), ',') || ')
 SELECT ' || string_agg('p.' || quote_ident(column_name), ',') || '
 FROM   table1 p '
 FROM   information_schema.columns raw
 WHERE  table_name  = 'master_table');

答案 1 :(得分:0)

只需在选择

中指明正确的顺序

而不是

  select *

如果你想在第二场比赛中获得3场。

  select field1, field3, field2

或者您可以使用INSERT sintaxis

 INSERT INTO master_table (field1, field3, field2)
     SELECT *