PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment définir la séquence à utiliser lors de la création d'une table dans la migration ActiveRecord dans Ruby on Rails 5.2 ?

Vous pouvez modifier la valeur par défaut dans une migration :

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

Vous voudrez peut-être utiliser :bigint au lieu de :integer selon la configuration de votre séquence et de vos tables. Vous devez utiliser un lambda pour le :default option pour obtenir le nextval('global_seq') brut expression dans la base de données.

Vous voudrez peut-être également supprimer l'ancienne séquence, autant que je sache, vous devrez utiliser connection.execute('drop sequence ...') pour ça.

Si vous ignorez le :id par défaut étape dans votre create_table alors vous pouvez tout faire lorsque vous créez manuellement le :id colonne :

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

Encore une fois, le choix entre t.bigint et t.integer dépend de la taille que vous voulez que votre PK soit.