sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur definierar man sekvensen som ska användas när man skapar en tabell i ActiveRecord-migrering i Ruby on Rails 5.2?

Du kan ändra standarden i en migrering:

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

Du kanske vill använda :bigint istället för :integer beroende på hur din sekvens och tabeller är inställda. Du måste använda en lambda för :default alternativet för att hämta den råa nextval('global_seq') uttryck i databasen.

Du kanske vill släppa den gamla sekvensen också, AFAIK måste du använda connection.execute('drop sequence ...') för det.

Om du hoppar över standard :id steg i din create_table då kan du göra allt när du manuellt skapar :id kolumn:

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

Återigen, valet mellan t.bigint och t.integer beror på hur stor du vill att din PK ska vara.



  1. MySQL - SQLite Hur förbättrar man denna mycket enkla fråga?

  2. XmlHTTPRequest:XML-tolkningsfel:inget element hittades

  3. Optimera en postgres likhetsfråga (pg_trgm + gin index)

  4. Hur man konfigurerar flytande nHibernate med MySQL