PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL - Gibt den Zeileninhalt zurück, wenn UPDATE fehlschlägt

Eine Möglichkeit, update weiterhin zu verwenden und dennoch die widersprüchlichen Zeilen zurückzugeben, wäre, eine Funktion zu erstellen, die diese Überprüfung durchführt, bevor Sie die Aktualisierung durchführen. Falls der Primärschlüssel bereits vorhanden ist, wird die widersprüchliche Zeile zurückgegeben, und wenn nicht, wird die Zeile aktualisiert. Ein Beispiel für eine solche Funktion könnte sein:

CREATE OR REPLACE FUNCTION my_func(cont TEXT, lang INT, idp TEXT) 
RETURNS SETOF sentence AS $$
DECLARE j RECORD;
BEGIN
  SELECT * FROM sentence WHERE content = cont AND 
                               language_id = lang INTO j;
  IF j IS NOT NULL THEN 
    RETURN NEXT j;
  ELSE
    RETURN QUERY UPDATE sentence SET content = cont, language_id= lang 
                 WHERE id = idp RETURNING *;
  END IF;
  EXCEPTION WHEN SQLSTATE '23505' THEN 
  RETURN QUERY SELECT * FROM sentence WHERE content = cont AND
                                            language_id= lang;
END$$ LANGUAGE plpgsql;

SELECT my_func('This is a sentence',834,'0538f24a-2046-4da6-933d-409aa7b7c597');

BEARBEITEN :Wenn es keinen Konflikt gibt und Sie immer noch RETURNING * wollen , fügen Sie einfach eine RETURN QUERY hinzu zum UPDATE Aussage:

...    
RETURN QUERY 
UPDATE sentence SET content = cont, language_id= lang WHERE id = idp 
RETURNING *;
...