sql >> Databáze >  >> RDS >> PostgreSQL

POSTGRESQL INSERT, pokud konkrétní název řádku neexistuje?

ON DUPLICATE KEY UPDATE je syntaxe MySQL, nikoli PostgreSQL. PostgreSQL nemá jednoduchou syntaxi SQL, aby dělal, co chcete.

Ale dokumentace obsahuje příklad kódu pro funkci, která to dělá.

CREATE TABLE db (a INT PRIMARY KEY, b TEXT);

CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS
$$
BEGIN
    LOOP
        -- first try to update the key
        UPDATE db SET b = data WHERE a = key;
        IF found THEN
            RETURN;
        END IF;
        -- not there, so try to insert the key
        -- if someone else inserts the same key concurrently,
        -- we could get a unique-key failure
        BEGIN
            INSERT INTO db(a,b) VALUES (key, data);
            RETURN;
        EXCEPTION WHEN unique_violation THEN
            -- do nothing, and loop to try the UPDATE again
        END;
    END LOOP;
END;
$$
LANGUAGE plpgsql;


  1. Jak používáte proměnné skriptu v psql?

  2. java.lang.OutofMemorySpace:Java haldový prostor při načítání 120 milionů řádků z databáze v pysparku

  3. Ukládání hodnot hash SHA1 v MySQL

  4. 4 způsoby, jak vložit více řádků do Oracle