在修改某些字段时复制表数据 - postgresql

时间:2015-02-15 19:46:49

标签: postgresql

我正在尝试将一个表复制到另一个表中,同时更改单个字段。假设我有table_aaa,它有大约一百个字段。我想基于table_aaa创建table_bbb,所以我这样做:

CREATE TABLE table_bbb 
    (LIKE table_aaa INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES);

然后我想填写table_bbb。如果我只想要table_aaa的副本,我会做的:

INSERT INTO table_bbb SELECT * FROM table_aaa;

但是,我想更改field_87(这些表中有field_1..field_100)。我可以在插入后更新,如下所示:

UPDATE table_bbb set field_87 = field_87 * 2

但是,这个表非常大,我有很多表需要进行相同的操作,系统在我执行此操作时关闭 - 所以我想跳过UPDATE并在INSERTing时发生这种魔法。

我运气不好,还是有任何我失踪的解决方案?

2 个答案:

答案 0 :(得分:0)

只需在select声明中执行此操作:

INSERT INTO table_bbb  (col1, col2, col3)
SELECT column_1, 
       column_2, 
       column_3 * 2
FROM table_aaa;

答案 1 :(得分:0)

就像a_horse_with_no_name所说的那样,显然没有办法解决这样的插入问题。但是,对于需要使用大量列迁移大量表的实际解决方案,手动解决方案还不够好。

我最终编写了一个pgplsql存储函数,它接收一个表名和要更改的列,并以自动方式执行此操作。我还投入了一些表重命名,索引重命名和序列操作,因为那是我的整个目标(每个表)。如果您遇到同样的问题并需要帮助,请告诉我。