で発生した場合、私は、私はパフォーマンスが鍵となりますので、大量にこのテーブルに書き込む必要があるテーブルPostgresの - CONFLICT ON - UPDATEが代わりにINSERT
CREATE TABLE foo
(
f0 int,
time_stamp timestamp,
CONSTRAINT foo_pk PRIMARY KEY (f0)
)
を知っている方法を。ときどき、私はf0
の既存の値を持つレコードを書き、今度はtime_stamp
を現在の時刻に更新するだけです。このため私はON CONFLICT..DO UPDATE
節を使用します。
問題は、INSERT
が発生したかどうか、またはUPDATE
かどうかを知る必要があるということです。
ただし、第2のis_update
の列を使用しています。挿入するときは、私が欲しいものを得るためにRETURNING is_update
を使用するとfalse
と
`ON CONFLICT .. DO UPDATE set is_update=true`
を挿入します。その問題は、データ自体に関連しない追加の列の導入です。
[アップサートは、PostgreSQL 9.5以降UPSERTと更新したかどうかを確認するには?](HTTP: //stackoverflow.com/questions/34762732/how-to-find-out-if-an-upsert-was-an-update-with-postgresql-9-5-upsert) – lad2025
@ lad2025この質問は以前に見つかりませんでしたが、ありがとう。しかし、提案された解決策は、私が試したことだが、この「UPSERT/ON CONFLICT」機能から抜けていると感じている機能のためにテーブルの追加の列があるために避けたいのです。 – Sagi
[PostgreSQL Upsertは、システムカラムXMIN、XMAXなどを使用して挿入され更新された行を区別します](https://stackoverflow.com/q/39058213/1995738) – klin