[解決済み] PostgreSQLのINSERT ON CONFLICT UPDATE(upsert)は除外された値をすべて使用します。
2022-04-19 08:59:17
質問
行をupsertする場合(PostgreSQL >=9.5)、可能なINSERTと可能なUPDATEを全く同じにしたい場合、以下のように書けばよいでしょう。
INSERT INTO tablename (id, username, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
ON CONFLICT (id) DO UPDATE SET
id=EXCLUDED.id, username=EXCLUDED.username,
password=EXCLUDED.password, level=EXCLUDED.level,email=EXCLUDED.email
もっと簡単な方法はないのでしょうか?EXCLUDE 値をすべて使用する」と言うだけです。
SQLiteでは、以前は:
INSERT OR REPLACE INTO tablename (id, user, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
解決方法は?
Postgres は、この関数と同等のものを実装していません。
INSERT OR REPLACE
. からは
ON CONFLICT
ドキュメント
(強調)。
これは、DO NOTHINGか、DO UPDATE句の指定で 正確な内容 は、競合が発生した場合に実行されるUPDATEアクションを示します。
置換の略語は出てきませんが。
ON CONFLICT DO UPDATE
は、既存のデータに基づいて新しい値を設定することができるため、より一般的に適用されます。例えば
INSERT INTO users (id, level)
VALUES (1, 0)
ON CONFLICT (id) DO UPDATE
SET level = users.level + 1;
関連
-
postgresのjsonbプロパティの利用について
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] PostgreSQLで重複して更新された場合の挿入?
-
[解決済み] SQL ServerにおけるINSERT OR UPDATEに関する解決策
-
[解決済み] PostgreSQLで更新+結合を行うには?
-
[解決済み] PostgreSQLで一重引用符で囲まれたテキストを挿入する
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み】オラクル:UPSERTする方法(テーブルへの更新または挿入?)
-
[解決済み] PostgreSQLでタイムスタンプの差を秒単位で求める
-
[解決済み】PostgreSQLでUPSERT(MERGE、INSERT ... ON DUPLICATE UPDATE)する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PostgreSQLのテーブルをパーティション分割する3つの方法
-
pgAdmin for postgreSQLでサーバーのデータをバックアップする方法
-
PostgreSQLの自己インクリメント構文使用上の注意点
-
PostgreSQLにおけるVACUUMコマンドの使用方法
-
[解決済み] 'ユーザー "postgres" のパスワード認証に失敗しました'
-
[解決済み】PostgreSQLがインデックス付きカラムに対してシーケンシャルスキャンを実行するのはなぜですか?
-
[解決済み] PostgreSQLでトリガーを一時的に無効にするにはどうすればよいですか?
-
[解決済み] PostgreSQLでカラムのデフォルト値を変更するにはどうすればよいですか?
-
[解決済み] Postgres でシーケンスをリセットし、id 列を新しいデータで埋めるにはどうすればよいですか?
-
[解決済み] PostgreSQLでタイムスタンプの差を秒単位で求める