PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Écrire une requête Postgres Get ou Create SQL

Dans un SGBD SQL, l'approche select-test-insert est une erreur :rien n'empêche un autre processus d'insérer la ligne "manquante" entre votre select et insert déclarations. Faites ceci à la place :

INSERT INTO mytable (color, brightness, size, age)
SELECT color, brightness, size, age 
FROM mytable
WHERE NOT EXISTS (
    select 1 from 
    from mytable
    where color = 'X' and brightness = 'Y'
);
SELECT (color, brightness, size, age) 
FROM mytable 
WHERE color = 'X' AND brightness= 'Y';

Vous devriez pouvoir transmettre ce texte entier en une seule "requête" au SGBD. Vous voudrez peut-être envisager d'en faire une procédure stockée.