PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Rails 3 bỏ qua ngoại lệ ràng buộc duy nhất của Postgres

Nói chung, việc xử lý ngoại lệ của bạn phải ở điểm gần nhất với lỗi mà bạn có thể làm điều gì đó hợp lý với ngoại lệ. Trong trường hợp của bạn, bạn muốn rescue bên trong vòng lặp của bạn, ví dụ:

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

Một số điểm quan tâm:

  1. Vi phạm ràng buộc bên trong cơ sở dữ liệu sẽ cung cấp cho bạn ActiveRecord::RecordNotUnique chứ không phải là PG::Error cơ bản . AFAIK, bạn sẽ nhận được PG::Error nếu bạn đang nói chuyện trực tiếp với cơ sở dữ liệu thay vì thông qua ActiveRecord.
  2. Thay thế INDEX_NAME_GOES_HERE với tên thật của chỉ mục duy nhất.
  3. Bạn chỉ muốn bỏ qua vi phạm ràng buộc cụ thể mà bạn đang mong đợi, do đó next if(...) theo sau là bit raise không đối số (tức là nêu lại ngoại lệ nếu đó không phải là điều bạn mong đợi).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spring Batch - Không thể tạo bảng siêu dữ liệu trên Postgres và tải dữ liệu thực tế vào mysql

  2. Tạo chỉ mục không phân biệt chữ hoa chữ thường trên mảng chuỗi Postgres

  3. Tại sao hàm postgres trigram word_similarity không sử dụng chỉ mục gin?

  4. Lấy nhận xét từ cơ sở dữ liệu PostgreSQL

  5. Làm cách nào để so sánh ngày trong các trường datetime trong Postgresql?