update tutorial postgres funciones ejemplo delete postgresql triggers plpgsql

tutorial - Postgresql, actualizar si existe una fila con algún valor único, de lo contrario inserte



update postgresql 9 (3)

Tengo una tabla de URLs. Contienen

(Id int clave primaria, carácter url variable única, contenido variado contenido, última fecha analizada).

Quiero crear un activador o algo (la regla puede ser), por lo que cada vez que hago una inserción desde mi programa Java, se actualiza una fila individual si existe una fila con dicha URL. De lo contrario, debe realizar una inserción.

Por favor, puede proporcionar un código completo en Postgresql. Gracias.


Encontré esta publicación más relevante en este escenario:

WITH upsert AS ( UPDATE spider_count SET tally=tally+1 WHERE date=''today'' AND spider=''Googlebot'' RETURNING * ) INSERT INTO spider_count (spider, tally) SELECT ''Googlebot'', 1 WHERE NOT EXISTS (SELECT * FROM upsert)


Esto se ha pedido muchas veces. Una posible solución se puede encontrar aquí: https://.com/a/6527838/552671

Esta solución requiere tanto una UPDATE como INSERT .

UPDATE table SET field=''C'', field2=''Z'' WHERE id=3; INSERT INTO table (id, field, field2) SELECT 3, ''C'', ''Z'' WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);

Con Postgres 9.1 es posible hacerlo con una consulta: https://.com/a/8702291/552671


Si los INSERTS son raros, evitaría hacer un NOT EXISTS (...) ya que emite un SELECT en todas las actualizaciones. En cambio, eche un vistazo a la respuesta de wildpeaks: https://dba.stackexchange.com/questions/5815/how-can-i-insert-if-key-not-exist-with-postgresql

CREATE OR REPLACE FUNCTION upsert_tableName(arg1 type, arg2 type) RETURNS VOID AS $$ DECLARE BEGIN UPDATE tableName SET col1 = value WHERE colX = arg1 and colY = arg2; IF NOT FOUND THEN INSERT INTO tableName values (value, arg1, arg2); END IF; END; $$ LANGUAGE ''plpgsql'';

De esta manera, Postgres inicialmente intentará hacer una UPDATE . Si no se afectó ninguna fila, volverá a emitir un INSERT .