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

PostgreSQL:Pelanggaran unik:7 ERROR:nilai kunci duplikat melanggar batasan unik users_pkey

Postgres menangani penambahan otomatis sedikit berbeda dari MySQL. Di Postgres, saat Anda membuat serial bidang, Anda juga membuat bidang urutan yang melacak id yang akan digunakan. Bidang urutan ini akan dimulai dengan nilai 1.

Saat Anda memasukkan catatan baru ke dalam tabel, jika Anda tidak menentukan id bidang, itu akan menggunakan nilai urutan, dan kemudian menambah urutan. Namun, jika Anda menentukan id bidang, maka urutannya tidak digunakan, dan juga tidak diperbarui.

Saya berasumsi bahwa ketika Anda pindah ke Postgres, Anda menyemai atau mengimpor beberapa pengguna yang ada, bersama dengan id mereka yang ada. Saat Anda membuat catatan pengguna ini dengan id mereka, urutannya tidak digunakan, dan karena itu tidak pernah diperbarui.

Jadi, jika, misalnya, Anda mengimpor 10 pengguna, Anda memiliki pengguna dengan id 1-10, tetapi urutan Anda masih 1. Saat Anda mencoba membuat pengguna baru tanpa menentukan id, itu menarik nilai dari urutan ( 1), dan Anda mendapatkan pelanggaran unik karena Anda sudah memiliki pengguna dengan id 1.

Untuk mengatasi masalah ini, Anda perlu mengatur users_id_seq nilai urutan ke MAX(id) pengguna Anda yang ada. Anda dapat membaca pertanyaan/jawaban ini untuk informasi lebih lanjut tentang mengatur ulang urutan, tetapi Anda juga dapat mencoba sesuatu seperti (belum diuji):

SELECT setval(pg_get_serial_sequence('users', 'id'), coalesce(max(id)+1, 1), false) FROM users;

FYI, ini bukan masalah di MySQL karena MySQL secara otomatis memperbarui urutan kenaikan otomatis ke nilai kolom terbesar ketika nilai secara manual dimasukkan ke dalam bidang kenaikan otomatis.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optimasi Kueri di PostgreSQL. JELASKAN Dasar-dasar – Bagian 3

  2. Cara Meningkatkan Koneksi Maks di PostgreSQL

  3. Cara Mengoptimalkan Replikasi Logis PostgreSQL

  4. Menelusuri PostgreSQL dengan perf

  5. Ikhtisar Penawaran Amazon RDS &Aurora untuk PostgreSQL