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

Rails 5.2 ActiveStorage với UUID trên Postgresql

Sau nhiều giờ đọc từng dòng trong activestorage mã nguồn và chạy các lệnh tương tự

@message = Message.new(message_params)
@message.save

lặp đi lặp lại. Chúng tôi nhận được cùng một kết quả ngẫu nhiên lặp đi lặp lại. Sau đó, chúng tôi xem xét các đường ray nhật ký được in trong khi đính kèm hình ảnh vào tin nhắn và quan sát thấy những điều sau:

S3 Storage (363.4ms) Uploaded file to key: KBKeHJARTjnsVjkgSbbii4Bz (checksum: S0GjR1EyvYYbMKh44wqlag==)

ActiveStorage::Blob Create (0.4ms)  INSERT INTO "active_storage_blobs" ("key", "filename", "content_type", "metadata", "byte_size", "checksum", "created_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"  [["key", "KBKeHJARTjnsVjkgSbbii4Bz"], ["filename", "sample.pdf"], ["content_type", "application/pdf"], ["metadata", "{\"identified\":true}"], ["byte_size", 3028], ["checksum", "S0GjR1EyvYYbMKh44wqlag=="], ["created_at", "2018-07-26 04:54:33.029769"]]

ActiveStorage::Attachment Create (2.7ms)  INSERT INTO "active_storage_attachments" ("name", "record_type", "record_id", "blob_id", "created_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["name", "file"], ["record_type", "Message"], ["record_id", "534736"], ["blob_id", "0"], ["created_at", "2018-07-26 05:04:35.958831"]]

record_id đã được đặt là 534736 , thay vì một uuid. Đây là nơi chúng tôi đã sai.

Bộ nhớ đang hoạt động mong đợi khóa ngoại là số nguyên cho mô hình Thư của chúng tôi và chúng tôi muốn mô hình này sử dụng uuids thay thế. Vì vậy, chúng tôi đã phải khắc phục sự cố di chuyển của mình, sử dụng uuids thay vì các khóa ngoại số nguyên.

Giải pháp:

class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
  def change
    create_table :active_storage_blobs, id: :uuid do |t|
      t.string   :key,        null: false
      t.string   :filename,   null: false
      t.string   :content_type
      t.text     :metadata
      t.bigint   :byte_size,  null: false
      t.string   :checksum,   null: false
      t.datetime :created_at, null: false

      t.index [ :key ], unique: true
    end

    create_table :active_storage_attachments, id: :uuid do |t|
      t.string     :name,     null: false
      t.references :record,   null: false, polymorphic: true, index: false, type: :uuid
      t.references :blob,     null: false, type: :uuid

      t.datetime :created_at, null: false

      t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
    end
  end
end

Hy vọng điều này sẽ giúp, ai đó đang đối mặt với các vấn đề tương tự. chúc mừng!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Xuất dữ liệu từ SQL Server 2008 R2 sang PostgreSQL 9.5

  2. Nhắm mục tiêu các giá trị cụ thể từ API JSON và chèn vào Postgresql, sử dụng Python

  3. GROUP BY trong mệnh đề UPDATE FROM

  4. Giao dịch khôi phục khi kích hoạt ERROR

  5. Tự động thêm một cột có nhiều giá trị vào bất kỳ bảng nào bằng cách sử dụng hàm PL / pgSQL