sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:devuelve el contenido de la fila cuando falla la ACTUALIZACIÓN

Una opción para seguir usando la actualización y seguir devolviendo las filas en conflicto sería crear una función que realice esta verificación antes de realizar la actualización. En caso de que la clave principal ya exista, devuelve la fila en conflicto y, de lo contrario, la fila se actualiza. Un ejemplo de tal función podría ser:

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');

EDITAR :Si no hay conflicto y aún desea el RETURNING * , simplemente agregue una RETURN QUERY a la UPDATE declaración:

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