行をアップサートし(PostgreSQL> = 9.5)、可能なINSERTを可能なUPDATEとまったく同じにしたい場合は、次のように記述できます。
INSERT INTO tablename (id, username, password, level, email)
VALUES (1, 'John', 'qwerty', 5, 'john@mail.com')
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, 'john@mail.com')
別のオプションは使用jsonb列にあり、その方法は、あなたが列を心配する必要はありません
—
jの意志
INSERT INTO tablename (id, username, password, level, email) VALUES (1, 'John', 'qwerty', 5, 'john@mail.com') ON CONFLICT (id) DO UPDATE SET (username, password, level, email) = (EXCLUDED.username, EXCLUDED.password, EXCLUDED.level, EXCLUDED.email).
ほとんど同じですが、列リストをコピー/貼り付け/管理するのは簡単です