sql >> Database >  >> RDS >> PostgreSQL

Een Oracle MERGE-instructie migreren naar een PostgreSQL UPSERT-instructie

Ik denk niet dat er een UPSERT-statement is in PostgreSQL 9.3, maar je kunt dit doen:

with cte_dual as (
    select
        v_c1 as key,
        v_c2 as pkey,
        v_c3 as wcount,
        v_c4 as dcount
), cte_update as (
    update my_table as a set
        wcount = b.wcount,
        dcount = b.dcount
    from cte_dual as b
    where b.key = a.key and b.pkey = a.pkey
    returning *
)
insert into my_table (key, pkey, wcount, dcount)
select d.key, d.pkey, d.wcount, d.dcount
from cte_dual as d
where not exists (select * from cte_update as u WHERE u.key = d.key and u.pkey = d.pkey)

U kunt een aantal soortgelijke vragen lezen:



  1. Python, mysql.connector-fout:geen resultaat ingesteld om op te halen van; cgitb laat zien dat de juiste waarde wordt doorgegeven aan functie

  2. SQL (MySQL) versus NoSQL (CouchDB)

  3. Probleem met machtigingen in SSMS:de SELECT-machtiging is geweigerd voor het object 'extended_properties', database 'mssqlsystem_resource', ... Fout 229)

  4. Python kan het ODBC-stuurprogramma op Heroku niet vinden nadat alles is ingesteld