Sellist operatsiooni tuntakse ka nime all upsert (kombinatsioon INSERT ja UPDATE operatsiooniks).
Selle realiseerimiseks saab PostgreSQLis kasutada INSERT ... ON CONFLICT lauset. Alates PostgreSQL 15 saab selleks kasutada ka MERGE lauset, mis võimaldab ühte lausesse kombineerida INSERT, UPDATE ja DELETE lause. Seda lauset kirjeldab ka SQL standard. Oracles on see lause ammu olemas.
Näiteks, kui ülesandeks on lisada tabelisse Salary töötajad (tabelist Emp), kes on seal registreerimata ja uuendada (tabeli Emp põhjal) nende töötajate palku, kes seal on registreeritud, siis kui enne tuli PostgreSQLis kasutada sellist lauset
, saab tänu MERGE lausele ka nii.
PostgreSQLi MERGE lause realisatsiooni probleemiks on, et kui samaaegselt MERGE lausega toimub INSERT lauseid, siis MERGE ei pruugi seda märgata, teeb ka ise INSERT ja tulemuseks unikaalsuse viga. ON CONFLICT kasutamise korral on tagatud, et toimub kas INSERT või UPDATE ja unikaalsuse viga ei teki.
Selle realiseerimiseks saab PostgreSQLis kasutada INSERT ... ON CONFLICT lauset. Alates PostgreSQL 15 saab selleks kasutada ka MERGE lauset, mis võimaldab ühte lausesse kombineerida INSERT, UPDATE ja DELETE lause. Seda lauset kirjeldab ka SQL standard. Oracles on see lause ammu olemas.
Näiteks, kui ülesandeks on lisada tabelisse Salary töötajad (tabelist Emp), kes on seal registreerimata ja uuendada (tabeli Emp põhjal) nende töötajate palku, kes seal on registreeritud, siis kui enne tuli PostgreSQLis kasutada sellist lauset
INSERT INTO Salary (employee_id, sal)SELECT empno, sal FROM EmpON CONFLICT (employee_id) DO UPDATESET sal = EXCLUDED.sal;, saab tänu MERGE lausele ka nii.
MERGE INTO Salary SUSING Emp EON (E.empno=S.employee_id)WHEN MATCHED THEN UPDATE SET sal = E.salWHEN NOT MATCHED THEN INSERT (employee_id, sal)VALUES (E.empno, E.sal);PostgreSQLi MERGE lause realisatsiooni probleemiks on, et kui samaaegselt MERGE lausega toimub INSERT lauseid, siis MERGE ei pruugi seda märgata, teeb ka ise INSERT ja tulemuseks unikaalsuse viga. ON CONFLICT kasutamise korral on tagatud, et toimub kas INSERT või UPDATE ja unikaalsuse viga ei teki.
Kas postitus oli kasulik? Hinda seda!
Keskmine hinne: Pole veel hinnanguid!