sql >> Databasteknik >  >> RDS >> PostgreSQL

Uppräknade typer med ActiveRecord och Postgresql

Du måste byta från db/schema.rb till db/structure.sql .

Det underliggande problemet är att schema.rb är en representation av databasens struktur som ActiveRecord ser den men ActiveRecord förstår inte många saker (som create type , CHECK-begränsningar och andra saker som dyker upp i execute some_raw_sql uttalanden i migrationer) som PostgreSQL gör. Du kan create type allt du vill utom schema.rb kommer aldrig att se det.

Om du vill använda saker som ActiveRecord inte förstår måste du använda db/structure.sql för att lagra din databas struktur. structure.sql lagrar databasens struktur som databasen förstår den, inte som ActiveRecord förstår den.

Det är enkelt att byta:

  1. Uppdatera din config/application.rb att innehålla config.active_record.schema_format = :sql .
  2. Gör en rake db:structure:dump för att få en initial db/structure.sql .
  3. Ta bort db/schema.rb från ditt katalogträd och revisionskontroll.
  4. Lägg till db/structure.sql till revisionskontroll.
  5. Justera dina rakevanor:
    • Använd db:structure:dump istället för db:schema:dump
    • Använd db:structure:load istället för db:schema:load

Som sagt, jag är inte säker på hur bra PostgreSQL:s ursprungliga enum typer kommer att interagera med ActiveRecord eftersom jag aldrig har gjort det. AR:s enum s är en översättning på klientsidan mellan strängar och heltal men PostgreSQL:s enum s hanteras i databasen och de känner inte till varandra. Det kan finnas konflikter och du måste se till att hålla dem synkroniserade med varandra.




  1. SQLite-uppdatering

  2. Förstå SQL Server-säkerhetsfunktionen HAS_Permis_BY_Name och dess användningsfall

  3. Hur kan en javax.persistence.Column definieras som en osignerad TINYINT?

  4. JPA SequenceGenerator och GeneratedValue:namn / generatoregenskap unik endast per klass?