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

Rails 3 mengabaikan pengecualian batasan unik Postgres

Secara umum, penanganan pengecualian Anda harus berada pada titik terdekat dengan kesalahan sehingga Anda dapat melakukan sesuatu yang masuk akal dengan pengecualian. Dalam kasus Anda, Anda ingin rescue di dalam loop Anda, misalnya:

stuff.each do |h|
  begin
    Model.create(h)
  rescue ActiveRecord::RecordNotUnique => e
    next if(e.message =~ /unique.*constraint.*INDEX_NAME_GOES_HERE/)
    raise
  end
end

Beberapa tempat menarik:

  1. Pelanggaran batasan di dalam database akan memberi Anda ActiveRecord::RecordNotUnique kesalahan daripada PG::Error yang mendasarinya . AFAIK, Anda akan mendapatkan PG::Error jika Anda berbicara langsung ke database daripada melalui ActiveRecord.
  2. Ganti INDEX_NAME_GOES_HERE dengan nama asli dari indeks unik.
  3. Anda hanya ingin mengabaikan pelanggaran batasan spesifik yang Anda harapkan, oleh karena itu next if(...) bit diikuti oleh raise . tanpa argumen (yaitu menaikkan kembali pengecualian jika tidak seperti yang Anda harapkan).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai kolom PostgreSQL harus berurutan

  2. Bagaimana cara saya memilih nilai non-null sebelumnya secara efisien?

  3. Permintaan ltree Postgresql untuk menemukan induk dengan sebagian besar anak; tidak termasuk root

  4. Ganti karakter dengan string multi-karakter

  5. Format Angka dengan Koma di PostgreSQL