Wenn Du 9.1 verwendest, geht das auch mit einem einzigen SQL Statement:
Code:
WITH new_values (a,b,c,d,e) as (
values
(1, 2, 3, 4, 5)
),
upsert as
(
UPDATE mytable m
set m.e = nv.e
FROM new_values nv
WHERE m.a = nv.a
AND m.b = nv.b
RETURNING m.*
)
INSERT INTO mytable (a,b,c,d,e)
SELECT a,b,c,d,e
FROM new_values
WHERE NOT EXISTS (SELECT 1
FROM upsert up
WHERE up.a = new_values.a
AND up.b = new_values.b) Wenn Du mehr als einen Datensatz ändern/einfügen willst, dann häng die weiteren Werte einfach in den "VALUES" Teil:
Code:
WITH new_values (a,b,c,d,e) as (
values
(1, 2, 3, 4, 5),
(10,20,30,40,50),
(100,200,300,400,500)
),
....
Lesezeichen