Bạn có thể thay đổi giá trị mặc định khi di chuyển:
change_column :my_objects, :id, :integer, default: -> { "nextval('global_seq')" }
Bạn có thể muốn sử dụng :bigint
thay vì :integer
tùy thuộc vào cách thiết lập trình tự và bảng của bạn. Bạn phải sử dụng lambda cho :default
tùy chọn để lấy nextval('global_seq')
biểu thức vào cơ sở dữ liệu.
Bạn cũng có thể muốn loại bỏ trình tự cũ, AFAIK bạn phải sử dụng connection.execute('drop sequence ...')
cho điều đó.
Nếu bạn đang bỏ qua :id
mặc định trong create_table
của bạn thì bạn có thể làm tất cả khi tạo :id
theo cách thủ công cột:
create_table :my_objects, id: false do |t|
t.bigint :id, null: false, default: -> { "nextval('global_seq')" }
t.primary_key :id
...
end
Một lần nữa, sự lựa chọn giữa t.bigint
và t.integer
phụ thuộc vào mức độ bạn muốn PK của mình.