update returning postgres link into ejemplo database postgresql conditional-statements insert-into

database - returning - postgresql if select



CondiciĆ³n INSERT INTO declaraciĆ³n en postgres (2)

A partir de la versión 9.5 de pgsql upsert está incluido, usando INSERTAR ... EN CONFLICTO ACTUALIZAR ...

La respuesta a continuación ya no es relevante. Postgres 9.5 fue lanzado un par de años después con una mejor solución.

Postgres no tiene la funcionalidad " upsert " sin agregar nuevas funciones.
Lo que tendrá que hacer es ejecutar la consulta de selección y ver si tiene filas coincidentes. Si lo haces, entonces insértalo.

Sé que no estás queriendo exactamente un aumento, pero es casi lo mismo.

Estoy escribiendo un procedimiento de reserva para una base de datos de reserva de aerolínea simulada y lo que realmente quiero hacer es algo como esto:

IF EXISTS (SELECT * FROM LeadCustomer WHERE FirstName = ''John'' AND Surname = ''Smith'') THEN INSERT INTO LeadCustomer (Firstname, Surname, BillingAddress, email) VALUES (''John'', ''Smith'', ''6 Brewery close, Buxton, Norfolk'', [email protected]'');

Pero Postgres no admite sentencias IF sin cargar la extensión PL / pgSQL. Me preguntaba si habría una manera de hacer algo equivalente a esto o si simplemente tendría que haber alguna interacción del usuario en este paso.


Ese comando específico se puede hacer así:

insert into LeadCustomer (Firstname, Surname, BillingAddress, email) select ''John'', ''Smith'', ''6 Brewery close, Buxton, Norfolk'', ''[email protected]'' where not exists ( select * from leadcustomer where firstname = ''John'' and surname = ''Smith'' );

Insertará el resultado de la declaración de selección y la select solo devolverá una fila si ese cliente no existe.