私は模擬航空会社の予約データベースの予約手順を書いていますが、私が本当にやりたいことは次のようなものです:
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]');
しかし、PostgresはPL/pgSQL拡張機能をロードしないとIF
ステートメントをサポートしません。これに相当する方法があるのか、それともこのステップでユーザーとのやり取りが必要なのか、疑問に思っていました。
この特定のコマンドは次のように実行できます。
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'
);
Selectステートメントの結果を挿入し、select
はその顧客が存在しない場合にのみ行を返します。
9.5の時点でpgsqlのupsertが含まれ、 INSERT ... ON CONFLICT DO UPDATE ... を使用して
以下の回答は関係ありません。 Postgres 9.5は、数年後により良いソリューションでリリースされました。
Postgresには、新しい関数を追加することなく「 psert 」機能はありません。
選択クエリを実行し、一致する行があるかどうかを確認する必要があります。もしそうなら、それを挿入します。
アップサートを正確に望んでいないことは知っていますが、それはほとんど同じです。