Puede cambiar el valor predeterminado en una migración:
change_column :my_objects, :id, :integer, default: -> { "nextval('global_seq')" }
Es posible que desee utilizar :bigint
en lugar de :integer
dependiendo de cómo estén configuradas la secuencia y las tablas. Tienes que usar una lambda para el :default
opción para obtener el nextval('global_seq')
sin procesar expresión en la base de datos.
Es posible que también desee eliminar la secuencia anterior, AFAIK, tendría que usar connection.execute('drop sequence ...')
por eso.
Si te saltas el :id
predeterminado paso en su create_table
entonces puede hacerlo todo cuando crea manualmente el :id
columna:
create_table :my_objects, id: false do |t|
t.bigint :id, null: false, default: -> { "nextval('global_seq')" }
t.primary_key :id
...
end
De nuevo, la elección entre t.bigint
y t.integer
depende de qué tan grande quieras que sea tu PK.