Insertion conditionnelle dans la déclaration de postgres
j'écris une procédure de réservation pour une base de données de réservation de ligne aérienne simulée et ce que je veux vraiment faire est quelque chose comme ceci:
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', cmp.testing@example.com');
mais Postgres ne supporte pas les déclarations IF
sans charger L'extension PL/pgSQL. Je me demandais s'il y avait un moyen de faire un équivalent de ceci ou s'il va juste y avoir une interaction d'utilisateur dans cette étape?
2 réponses
que la commande spécifique peut être faite comme ceci:
insert into LeadCustomer (Firstname, Surname, BillingAddress, email)
select
'John', 'Smith',
'6 Brewery close, Buxton, Norfolk', 'cmp.testing@example.com'
where not exists (
select * from leadcustomer where firstname = 'John' and surname = 'Smith'
);
il insérera le résultat de la déclaration select, et le select
ne retournera une ligne que si ce client n'existe pas.
à partir de la version 9.5 de pgsql upsert est inclus, en utilisant INSERT ... SUR LES CONFLITS DE FAIRE LA MISE À JOUR ...
La réponse ci-dessous n'est plus pertinente. Postgres 9.5 est sorti quelques années plus tard avec une meilleure solution.
Postgres n'a pas" upsert " fonctionnalité sans ajouter de nouvelles fonctions.
Ce que vous devez faire est d'exécuter l'sélectionnez interrogez et voyez si vous avez des lignes correspondantes. Si vous le faites, puis l'insérer.
je sais que vous ne voulez pas un upsert exactement, mais c'est à peu près la même chose.