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

Rails 5.2 ActiveStorage dengan UUID di Postgresql

Setelah berjam-jam berjalan baris demi baris di penyimpanan aktif kode sumber , dan menjalankan perintah yang sama

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

lagi dan lagi. Kami mendapat hasil acak yang sama lagi dan lagi. Kemudian kami menelusuri rel log yang dicetak sambil melampirkan gambar ke pesan dan mengamati hal berikut:

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 sedang ditetapkan sebagai 534736 , alih-alih uuid. Di sinilah kita salah.

Penyimpanan aktif mengharapkan kunci asing bilangan bulat ke model Pesan kami, dan kami ingin menggunakan uuids sebagai gantinya. Jadi kami harus memperbaiki migrasi kami, untuk menggunakan uuids alih-alih kunci asing integer.

Solusi:

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

Semoga ini bisa membantu, seseorang yang menghadapi masalah serupa. semangat!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mendapatkan tanggal dari stempel waktu di PostgreSQL

  2. Di psql, mengapa beberapa perintah tidak berpengaruh?

  3. Mengekstrak nilai tag xml di PostgreSQL

  4. PostgreSQL:PILIH DIMANA kurang dari 15 menit

  5. Urutan postgres tanpa atribut 'dimiliki oleh' tidak mengembalikan id di Django 1.3