PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyliczone typy z ActiveRecord i Postgresql

Musisz przejść z db/schema.rb do db/structure.sql .

Podstawowym problemem jest to, że schema.rb jest reprezentacją struktury bazy danych, jaką widzi ActiveRecord, ale ActiveRecord nie rozumie wielu rzeczy (takich jak create type , ograniczenia CHECK i inne rzeczy, które pojawiają się w execute some_raw_sql w migracjach), które robi PostgreSQL. Możesz create type wszystko co chcesz oprócz schema.rb nigdy go nie zobaczę.

Jeśli chcesz użyć rzeczy, których ActiveRecord nie rozumie, musisz użyć db/structure.sql do przechowywania struktury bazy danych. structure.sql przechowuje strukturę bazy danych tak, jak rozumie ją baza danych, a nie tak, jak rozumie ją ActiveRecord.

Przełączanie jest łatwe:

  1. Zaktualizuj plik config/application.rb zawierać config.active_record.schema_format = :sql .
  2. Wykonaj rake db:structure:dump aby uzyskać początkowy db/structure.sql .
  3. Usuń db/schema.rb z twojego drzewa katalogów i kontroli wersji.
  4. Dodaj db/structure.sql do kontroli wersji.
  5. Dostosuj swoje nawyki dotyczące prowizji:
    • Użyj db:structure:dump zamiast db:schema:dump
    • Użyj db:structure:load zamiast db:schema:load

To powiedziawszy, nie jestem pewien, jak dobrze natywny enum PostgreSQL typy będą współdziałać z ActiveRecord, jak nigdy tego nie robiłem. enum AR s są tłumaczeniem po stronie klienta między ciągami i liczbami całkowitymi, ale enum s są obsługiwane w bazie danych i nie wiedzą o sobie nawzajem. Mogą wystąpić konflikty i musisz mieć pewność, że będą one ze sobą zsynchronizowane.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obcinanie postgresa jest powolne

  2. Aktualizacja do PostgreSQL13

  3. H2 błąd bazy danych w pamięci Błąd konwersji danych podczas konwersji przy użyciu UUID jako klucza podstawowego

  4. Jak wykonać kopię zapasową i przywrócić bazę danych PostgreSQL

  5. Jak używać mieszanych argumentów typu int i liczbowych w funkcji Postgresa 9.1+