PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come definire la sequenza da utilizzare durante la creazione di una tabella nella migrazione ActiveRecord in Ruby on Rails 5.2?

Puoi modificare l'impostazione predefinita in una migrazione:

change_column :my_objects, :id, :integer, default: -> { "nextval('global_seq')" }

Potresti voler usare :bigint invece di :integer a seconda di come sono impostate la sequenza e le tabelle. Devi usare un lambda per :default opzione per ottenere il grezzo nextval('global_seq') espressione nel database.

Potresti voler eliminare anche la vecchia sequenza, AFAIK dovresti usare connection.execute('drop sequence ...') per quello.

Se stai saltando il :id predefinito entra nel tuo create_table quindi puoi fare tutto quando crei manualmente il :id colonna:

create_table :my_objects, id: false do |t|
  t.bigint :id, null: false, default: -> { "nextval('global_seq')" }
  t.primary_key :id
  ...
end

Ancora una volta, la scelta tra t.bigint e t.integer dipende da quanto vuoi che sia grande il tuo PK.