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

Opregnede typer med ActiveRecord og Postgresql

Du skal skifte fra db/schema.rb til db/structure.sql .

Det underliggende problem er, at schema.rb er en repræsentation af databasens struktur, som ActiveRecord ser den, men ActiveRecord forstår ikke mange ting (såsom create type , CHECK begrænsninger og andre ting, der dukker op i execute some_raw_sql udsagn i migrationer), som PostgreSQL gør. Du kan create type alt hvad du vil, undtagen schema.rb vil aldrig se det.

Hvis du vil bruge ting, som ActiveRecord ikke forstår, skal du bruge db/structure.sql for at gemme din databases struktur. structure.sql gemmer databasens struktur, som databasen forstår den, ikke som ActiveRecord forstår den.

Det er nemt at skifte:

  1. Opdater din config/application.rb at indeholde config.active_record.schema_format = :sql .
  2. Foretag en rake db:structure:dump for at få en indledende db/structure.sql .
  3. Slet db/schema.rb fra dit bibliotekstræ og revisionskontrol.
  4. Tilføj db/structure.sql til revisionskontrol.
  5. Juster dine rake-vaner:
    • Brug db:structure:dump i stedet for db:schema:dump
    • Brug db:structure:load i stedet for db:schema:load

Når det er sagt, er jeg ikke sikker på, hvor godt PostgreSQL's oprindelige enum typer vil interagere med ActiveRecord, da jeg aldrig har gjort det. AR's enum s er en oversættelse på klientsiden mellem strenge og heltal, men PostgreSQL's enum s håndteres inde i databasen, og de kender ikke til hinanden. Der kan være konflikter, og du skal sørge for at holde dem synkroniseret med hinanden.




  1. Søgeformularen dirigerer ikke til den rigtige controller i Rails 5.1

  2. Hvordan konverterer jeg denne komplekse SQL til en Django-modelforespørgsel?

  3. Hvordan indstiller jeg standarddatabasen i SQL Server fra kode?

  4. Skift Oracle-port fra port 8080