Migrasi Rails Untuk Menambah Indeks Selisih 2 Kolom

Di aplikasi Ruby on Rails saya, saya memiliki model Message yang memiliki kolom created_at dan kolom status_updated_at. Keduanya adalah waktu kencan.

Untuk mempercepat kueri seperti Message.where(status: 'delivered', account_id: 11).where('status_updated_at - created_at >= ?', "180 seconds"), saya ingin menambahkan indeks pada perbedaan antara kolom status_updated_at dan created_at.

Saya sudah mencoba kode ini:

class AddMessageIndicesForDashboard < ActiveRecord::Migration[5.1]
  def change
    add_index :messages, [:status, :account_id, :created_at, "(status_updated_at-created_at)"], name: 'dashboard_delivery_time_index'
  end
end

yang menghasilkan PG::UndefinedColumn: ERROR: column "status_updated_at-created_at" does not exist

Anehnya, katakanlah jika saya hanya ingin menambahkan indeks ke status_udpated_at - created_at dengan melakukan add_index :messages, "(status_updated_at-created_at)", name: 'dashboard_delivery_time_index', itu akan berhasil.

Ada saran? Terima kasih!


person jl118    schedule 06.06.2019    source sumber


Jawaban (2)


Mungkin mencoba

add_index :messages, "(status_updated_at-created_at)", name: 'dashboard_delivery_time_index'  

PostgreSQL(9.1) 11.7. Indeks pada Ekspresi.

Sintaks perintah CREATE INDEX biasanya memerlukan penulisan tanda kurung di sekitar ekspresi indeks... Tanda kurung dapat dihilangkan jika ekspresi hanyalah pemanggilan fungsi...

Karena Anda ingin menggunakan ekspresi daripada fungsi, tanda kurung tambahan harus melakukannya sesuai dengan dokumen.

person engineersmnky    schedule 06.06.2019
comment
Terimakasih atas infonya! Itu berhasil. Sekarang katakanlah saya ingin menambahkan beberapa kolom lain bersama dengan status_updated_at - created_at, itu masih akan menimbulkan kesalahan yang mengatakan PG::UndefinisiColumn: ERROR: kolom (status_updated_at-created_at) tidak ada. Saya telah memperbarui pertanyaannya. - person jl118; 07.06.2019

Saya memperbaiki masalah saya, Anda dapat melakukan add_index :messages, "status, account_id, (status_updated_at-created_at)", name: 'dashboard_delivery_time_index'

person jl118    schedule 06.06.2019