PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изброени типове с ActiveRecord и Postgresql

Трябва да превключите от db/schema.rb към db/structure.sql .

Основният проблем е, че schema.rb е представяне на структурата на базата данни, както я вижда ActiveRecord, но ActiveRecord не разбира много неща (като create type , ПРОВЕРКА на ограниченията и други неща, които се показват в execute some_raw_sql изрази в миграции), които PostgreSQL прави. Можете да create type всичко, което искате, освен schema.rb никога няма да го види.

Ако искате да използвате неща, които ActiveRecord не разбира, тогава трябва да използвате db/structure.sql за съхраняване на структурата на вашата база данни. structure.sql съхранява структурата на базата данни така, както я разбира базата данни, а не както я разбира ActiveRecord.

Превключването е лесно:

  1. Актуализирайте своя config/application.rb да съдържа config.active_record.schema_format = :sql .
  2. Направете rake db:structure:dump за да получите първоначален db/structure.sql .
  3. Изтрийте db/schema.rb от вашето дърво на директории и контрол на ревизиите.
  4. Добавете db/structure.sql за контрол на ревизиите.
  5. Коригирайте своите рейк навици:
    • Използвайте db:structure:dump вместо db:schema:dump
    • Използвайте db:structure:load вместо db:schema:load

Това каза, че не съм сигурен колко добре е собственият enum на PostgreSQL типове ще взаимодействат с ActiveRecord, както никога не съм го правил. AR на enum s са превод от страна на клиента между низове и цели числа, но enum s се обработват в базата данни и не знаят един за друг. Възможно е да има конфликти и ще трябва да сте сигурни, че ги поддържате синхронизирани един с друг.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изключете припокриващи се периоди във времевата агрегатна функция

  2. org.hibernate.MappingException:Няма съпоставяне на диалект за тип JDBC:1111

  3. Ограничения за имена на колони в таблицата Postgres?

  4. Обединяване на връзки към база данни на Celery Worker

  5. правилен начин за създаване на обобщена таблица в postgresql с помощта на CASE WHEN