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

Dalam migraiton Rails, bagaimana cara menetapkan nilai default kolom menjadi SEKARANG () alih-alih waktu ketika saya menjalankan migrasi?

Itu tidak didokumentasikan dengan baik tetapi Anda dapat menyediakan lambda sebagai nilai default dalam migrasi dan itu akan melakukan Hal yang Benar. Jika Anda mengatakan ini:

def change
  change_column_default :stratum_worker_submissions, :created_at, -> { 'now()' }
end

maka nilai default kolom akan diatur ke now() dan fungsi database now() tidak akan dipanggil sampai nilai default diperlukan untuk kolom. Kemudian jika Anda \d stratum_worker_submissions di psql Anda akan melihat:

created_at | timestamp without time zone | not null default now()

seperti yang diinginkan. Default lainnya akan dievaluasi saat migrasi berjalan dan Anda akan mendapatkan stempel waktu tetap sebagai default.

Atau, Anda selalu dapat melakukannya dengan tangan menggunakan SQL:

def up
  connection.execute(%q(
    alter table stratum_worker_submissions
    alter column created_at
    set default now()
  ))
end
def down
  connection.execute(%q(
    alter table stratum_worker_submissions
    alter column created_at
    drop default
  ))
end

Perhatikan bahwa jika Anda mulai mengubah skema secara manual dengan SQL, Anda mungkin mulai melakukan hal-hal yang tidak akan muncul di db/schema.rb karena Anda dapat dengan cepat masuk ke SQL yang tidak dimengerti oleh ActiveRecord. Jika itu terjadi maka Anda dapat mengubah dari db/schema.rb ke db/structure.sql dengan mengubah config/application.rb :

config.active_record.schema_format = :sql

lalu ganti db/schema.rb dengan db/structure.sql dalam kontrol revisi dan menggunakan db:structure menyapu tugas menggantikan db:schema yang biasa tugas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menginterpretasikan nilai PosgreSQL txid_current()

  2. Bagaimana cara menentukan tipe kolom untuk CTE (Common Table Expressions) di PostgreSQL?

  3. Cara mencadangkan dan memulihkan database PostgreSQL melalui DBeaver

  4. Bagaimana cara mendapatkan dimensi kolom ARRAY?

  5. Kesalahan byte postgres saat mengikat nol ke pernyataan yang disiapkan