MySQLでは、INSERT ... ON DUPLICATE KEY UDPATEを実行できます。 postgresにはそのようなものはまだありません(私が知る限り、MERGEはバージョン8.4に含まれていませんでした)。
同様の動作を実現するためにルールを使用することをお勧めしました。 この場合、ルールを使用することはMERGEよりも優れているように思われ、ルールを作成し...落とし穴に遭遇しました。 カウンターを実装しました。一意のキーがあり、新しいレコードが挿入されるときにそのようなキーが既にテーブルに存在する場合は、代わりにカウンター値を増やします。
シンプルな状況、シンプルなルール。 しかし、最初の挿入時に、このルールが判明しましたが、うまくいきました! その結果、最初の挿入では1が挿入されず、2が挿入されます。
執筆中に、
Fred84はこの状況を詳細に説明するリンクを投げました:
archives.postgresql.org/pgsql-bugs/2007-03/msg00080.php #CREATE TABLE x(id INT NOT NULL、counter INT NOT NULL DEFAULT 0、PRIMARY KEY(id));
#ルールxxx ASを作成または置換
xへの挿入時
WHERE(EXISTS(SELECT x.id
xから
WHERE x.id = new.id))DO INSTEAD UPDATE x SET counter = x.counter + 1
WHERE x.id = new.id;
#INSERT INTO x VALUES(1、1);
#select * from x;
id | カウンター
---- + ---------
1 | 2
ご覧のとおり、counter = 2ですが、物事の論理によると1でなければなりません。