Skip to content

Commit 0793697

Browse files
authored
Merge pull request #324 from mauricemaina/main
How to upsert in PostgreSQL
2 parents 94d1282 + 6a8938d commit 0793697

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
INSERT INTO Student (id, name, national_id, birth_date, enrollment_date, graduation_date, gpa)
2+
VALUES
3+
(1717, 'Param Mohan', 1023456545, '2002-05-15', '2021-01-15', '2025-06-15', 3.50),
4+
(1722, 'Alice Parker', 1098765432, '2003-02-20', '2022-01-15', NULL, NULL)
5+
ON CONFLICT (id)
6+
DO UPDATE SET
7+
name = EXCLUDED.name,
8+
national_id = EXCLUDED.national_id,
9+
birth_date = EXCLUDED.birth_date,
10+
enrollment_date = EXCLUDED.enrollment_date,
11+
graduation_date = EXCLUDED.graduation_date,
12+
gpa = EXCLUDED.gpa;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
MERGE INTO Student AS s
2+
USING (VALUES
3+
(1717, 'Param Mohan', 1023456545, CAST('2002-05-15' AS DATE), CAST('2021-01-15' AS DATE), CAST('2025-06-15' AS DATE), 3.50),
4+
(1722, 'Alice Parker', 1098765432, CAST('2003-02-20' AS DATE), CAST('2022-01-15' AS DATE), NULL, NULL)
5+
) AS v(id, name, national_id, birth_date, enrollment_date, graduation_date, gpa)
6+
ON s.id = v.id
7+
WHEN MATCHED THEN
8+
UPDATE SET
9+
name = v.name,
10+
national_id = v.national_id,
11+
birth_date = v.birth_date,
12+
enrollment_date = v.enrollment_date,
13+
graduation_date = v.graduation_date,
14+
gpa = v.gpa
15+
WHEN NOT MATCHED THEN
16+
INSERT (id, name, national_id, birth_date, enrollment_date, graduation_date, gpa)
17+
VALUES (v.id, v.name, v.national_id, v.birth_date, v.enrollment_date, v.graduation_date, v.gpa);

0 commit comments

Comments
 (0)