Postgres (seperti hampir semua DBMS lainnya) tidak akan memeriksa apakah nilai target berbeda dari yang asli. Jadi jawabannya adalah:ya, itu akan memperbarui baris meskipun nilainya berbeda.
Namun, Anda dapat dengan mudah mencegah pembaruan "kosong" dalam kasus ini dengan menyertakan klausa where:
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
Klausa where akan mencegah pembaruan baris yang identik dengan baris yang sedang disisipkan. Untuk membuatnya berfungsi dengan benar, sisipan Anda memiliki untuk membuat daftar semua kolom dari tabel target. Jika tidak, topic is distinct from excluded
kondisi akan selalu benar karena excluded
baris memiliki lebih sedikit kolom daripada topic
baris dan dengan demikian id "berbeda" darinya.
Menambahkan cek untuk nilai yang dimodifikasi telah dibahas beberapa kali di milis dan selalu dibuang. Alasan utamanya adalah, tidak masuk akal untuk memiliki overhead untuk memeriksa perubahan untuk setiap pernyataan hanya untuk mengatasi beberapa yang ditulis dengan buruk.