Postgres插入数据时多主键重复覆盖更新
时间: 2023-09-14 13:06:02 浏览: 317
monocle-migrator:一种工具,可帮助您在Postgres <-> MySQL之间迁移数据
在PostgreSQL中,可以使用INSERT INTO ON CONFLICT语句来实现在插入数据时,如果遇到重复的主键,则进行更新操作。具体实现步骤如下:
1. 首先,需要在表中设置主键或唯一约束。例如,假设我们有一个名为“students”的表,其中“id”是主键,我们可以使用以下语句创建表:
```
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INTEGER NOT NULL,
CONSTRAINT unique_name_age UNIQUE (name, age)
);
```
2. 然后,在INSERT INTO语句中使用ON CONFLICT子句和DO UPDATE子句。例如,如果我们想插入一条数据,如果遇到重复的“name”和“age”字段,则更新“age”字段的值,可以使用以下语句:
```
INSERT INTO students (name, age) VALUES ('Tom', 20)
ON CONFLICT (name, age) DO UPDATE SET age = EXCLUDED.age;
```
在上面的语句中,如果插入的数据与已有的数据的“name”和“age”字段相同,则更新“age”字段的值为插入的数据的“age”值。如果没有冲突,则插入一条新的数据。
需要注意的是,ON CONFLICT子句中的字段必须是主键或唯一约束中的字段,否则会出现语法错误。
阅读全文