Postgres将数据从一个表插入到另一个列名称匹配的表中

时间:2017-01-09 23:50:13

标签: sql database postgresql insert

摘要

我有一个主表,其中包含名为A到Z的列。我有十几个其他表也有严格的字母命名列(也是相同的数据类型),而不是从A到Z的所有列。(例如,一个表可能包含列A,C,H,而另一列包含列A,B,C,X,Y,Z等)

假设主表具有所有A到Z列的默认值,是否有办法在不指定每个列名的情况下选择其他表的记录?

我知道最好是明确的,但实际上我正在处理数百个字段,而不是26个,所以我希望有一种更好的方式让我望而却步。

混凝土

我正在尝试将年度数据存储在一个表中(有额外的年份列)。每年,所有现有字段都保持上一年,但可能会添加新字段。我已经将每年的数据导入到自己的表中(其中25个),并希望进行整合。最近的年份/主表包含数百列。

我在Insert into table from another with different columns count (MySql)找到了类似的问题,但是答案会在insert中明确列出所有列。

1 个答案:

答案 0 :(得分:0)

了解可能存在各种原因,我认为最好是查看表继承之类的内容,为以前的表提供统一的查询接口。这里当然有困难。但如果可以的话,那可能是更好的解决方案。请注意,如果继续使用继承,添加新字段会有很大不同。

您将拥有的下一个选项是为每个表创建一个SQL映射到归档表。因此,如果你有一个额外的年份int字段,你需要填写你可以:

CREATE FUNCTION mytable_to_archive(mytable) returns archive language sql as
$$
select $1.*, null::int as year;
$$ IMMUTABLE;

注意出于性能原因,这只需要一个元组,并返回一个元组。没有数据库查找。然后你可以:

INSERT INTO archive
SELECT (mytable_to_archive(mytable)).* from mytable;