如何将 table 的内容直接插入到另一个 table 中?

How to insert correctly content of a table directly in an other table?

美好的一天,我在 Mirth Connect 中使用 Javascript 将分配在 PostgreSql 数据库 table 中的所有原始数据直接插入另一个 table 中,如果重复,更新行。我正在尝试使用它,但它给了我这个错误:

InsertIntoPatientMapping= dbConn.executeUpdate('insert into patient_mapping (select * from patient_mapping_test) ON DUPLICATE KEY UPDATE');
    Wrapped org.postgresql.util.PSQLException: ERROR: syntax error at or near "DUPLICATE"  Position: 69

我做错了什么?

假设你有一个 id 列,为了只考虑重复的键来更新,你可以:

insert into patient_mapping (select * from patient_mapping_test) ON CONFLICT (id) DO UPDATE SET id=EXCLUDED.id

https://www.postgresql.org/docs/13/sql-insert.html

编辑

为此您需要考虑几件事:

  • 您需要指定发生冲突的列;
  • 每列必须有一个索引;
  • 您需要指定如何替换冲突的值。

例如:

create table T1 (id integer unique);
create table T2 (id integer unique);
insert into T1 (id) values (1);
insert into T1 (id) values (2);
insert into T2 (id) values (1);
insert into T2 (select * from T1) on conflict (id) do update set id=EXCLUDED.id;

select * from T2;

这可能对您有帮助:https://www.postgresqltutorial.com/postgresql-upsert/