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

Trong di chuyển Rails, làm cách nào để đặt giá trị mặc định của cột là NOW () thay vì thời gian khi tôi chạy di chuyển?

Nó không được ghi chép đầy đủ nhưng bạn có thể cung cấp lambda làm giá trị mặc định trong quá trình di chuyển và điều đó sẽ thực hiện Điều đúng đắn. Nếu bạn nói điều này:

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

thì giá trị mặc định của cột sẽ được đặt thành now() và hàm cơ sở dữ liệu now() sẽ không được gọi cho đến khi một giá trị mặc định là cần thiết cho cột. Sau đó, nếu bạn \d stratum_worker_submissions trong psql bạn sẽ thấy:

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

như mong muốn. Mọi mặc định khác sẽ được đánh giá khi quá trình di chuyển chạy và bạn sẽ kết thúc với một dấu thời gian cố định làm mặc định.

Ngoài ra, bạn luôn có thể làm điều đó bằng tay bằng 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

Lưu ý rằng nếu bạn bắt đầu thay đổi lược đồ bằng SQL theo cách thủ công, bạn có thể bắt đầu thực hiện những việc không xuất hiện trong db/schema.rb vì bạn có thể nhanh chóng truy cập vào SQL mà ActiveRecord không hiểu. Nếu điều đó xảy ra thì bạn có thể thay đổi từ db/schema.rb thành db/structure.sql bằng cách thay đổi config/application.rb :

config.active_record.schema_format = :sql

và sau đó thay thế db/schema.rb với db/structure.sql trong kiểm soát sửa đổi và sử dụng cấu trúc db:structure tác vụ cào thay cho db:schema thông thường nhiệm vụ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy Ngày và Giờ hiện tại với Chênh lệch múi giờ trong PostgreSQL

  2. Chèn giá trị DEFAULT vào cột khi tham số là NULL

  3. Khung thực thể Cốt lõi postgresql Ánh xạ loại mảng không hoạt động

  4. Làm cách nào để loại bỏ chỉ mục varchar_pattern_ops trong quá trình di chuyển django (1.8)?

  5. Các biến do người dùng xác định trong PostgreSQL