PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

akankah postgres benar-benar memperbarui file halaman ketika semua bidang sama sebelum dan sesudah pembaruan?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat daftar tabel dalam database saat ini menggunakan PostgreSQL

  2. Kembalikan beberapa bidang sebagai catatan di PostgreSQL dengan PL/pgSQL

  3. pg_dump vs pg_dumpall? yang mana yang digunakan untuk backup database?

  4. Fungsi agregat pada beberapa tabel yang digabungkan

  5. Bagaimana menjaga data tidak mengurutkan?