Alvaro muchas gracias por la respuesta, ahora te pregunto, esta consideración 
que me planteas también aplica al ejemplo que puse con CTE??

Acá te pongo nuevamente el ejemplo:

WITH CTE AS (
        UPDATE prueba
    SET
      nombre = 'Lazaro'
    WHERE id = 1 RETURNING id
)
INSERT INTO public.prueba
(
  id,
  nombre
)
SELECT 1, 'pepe' WHERE 1 NOT IN (SELECT CTE.id from CTE);

Un saludo.
________________________________________
De: Alvaro Herrera [alvhe...@2ndquadrant.com]
Enviado el: viernes, 29 de noviembre de 2013 11:43
Para: Lazaro Ruben Garcia Martinez
CC: pgsql-es-ayuda@postgresql.org
Asunto: Re: [pgsql-es-ayuda] Sobre comando MERGE

Lazaro Ruben Garcia Martinez escribió:
> Buenos días a todos en la lista.
>
> Existe algún soporte en PostgreSQL para hacer uso de la funcionalidad 
> MERGE/UPSERT?
>
> En caso de no existir una implementación utilizando CTE, podría ser factible 
> como la siguiente:

No.  Dos transacciones concurrentes haciendo lo mismo terminarían mal.
Realmente, la única forma de hacerlo es con un EXCEPTION en plpgsql que
intente un insert y si falla haga un update (o bien usando SAVEPOINTs y
ejecutando lo mismo directamente en vez de usar plpgsql).

Está en diseño una nueva forma de lidiar con este problema, que es algo
como INSERT..ON DUPLICATE KEY LOCK FOR UPDATE; puedes ver la (muy larga)
discusión en
http://www.postgresql.org/message-id/cam3swzthwrktvurf1awaih8qthgnmzafydcnw8qju7pqhk5...@mail.gmail.com

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE 
ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com

Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE 
ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a