stock_price_code
以下のような表があります。value
列にUNIQUE
制約があります。
create table stock_price_code (
id serial primary key,
value text not null,
unique (value)
);
INSERT
のレコードが見つからない場合は、テーブルに入れたいですvalue
。私はこれらの2つのクエリを持っています:
-- query 1
INSERT INTO stock_price_code (value)
SELECT 'MCD'
WHERE NOT EXISTS (SELECT * FROM stock_price_code WHERE value = 'MCD')
RETURNING id;
-- query 2
INSERT INTO stock_price_code (value) VALUES ('MCD')
ON CONFLICT (value) DO NOTHING
RETURNING id;
query 1
Postgres9.5より前に使用していました。その後、Postgres9.5はINSERT ... ON CONFLICT ...
機能の導入を開始しました。私はsubstitudeた場合query 1
にquery 2
、任意の既知の副作用かもパフォーマンスの問題があるのでしょうか?ありがとう。
クエリ2は、SELECT 'MCD' WHERE NOT EXISTS (SELECT * FROM stock_price_code WHERE value = 'MCD')
との間に行が挿入された場合に機能しますがINSERT INTO stock_price_code (value)
、クエリ1は重複して失敗します。
ON CONFLICT
私が信じているオーバーヘッドはそれよりも小さいと思いますがWHERE NOT EXISTS
、確かではありません
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加