sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo definir la secuencia a usar al crear una tabla en la migración de ActiveRecord en Ruby on Rails 5.2?

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.