sql >> Databáze >  >> RDS >> PostgreSQL

Výčtové typy s ActiveRecord a Postgresql

Musíte přejít z db/schema.rb na db/structure.sql .

Základní problém je v tom, že schema.rb je reprezentace struktury databáze tak, jak ji vidí ActiveRecord, ale ActiveRecord nerozumí mnoha věcem (například create type , ZKONTROLUJTE omezení a další věci, které se zobrazují v execute some_raw_sql příkazy při migracích), které PostgreSQL dělá. Můžete create type vše, co chcete, kromě schema.rb to nikdy neuvidí.

Pokud chcete používat věci, kterým ActiveRecord nerozumí, musíte použít db/structure.sql pro uložení struktury databáze. structure.sql ukládá strukturu databáze tak, jak ji databáze rozumí, nikoli tak, jak ji chápe ActiveRecord.

Přepínání je snadné:

  1. Aktualizujte config/application.rb obsahovat config.active_record.schema_format = :sql .
  2. Proveďte rake db:structure:dump získat počáteční db/structure.sql .
  3. Smažte db/schema.rb z vašeho adresářového stromu a kontroly revizí.
  4. Přidejte db/structure.sql ke kontrole revizí.
  5. Upravte své rake návyky:
    • Použijte db:structure:dump místo db:schema:dump
    • Použijte db:structure:load místo db:schema:load

To znamená, že si nejsem jistý, jak dobře je nativní enum PostgreSQL typy budou komunikovat s ActiveRecord, jak jsem to nikdy nedělal. enum AR s jsou překladem na straně klienta mezi řetězci a celými čísly, ale enum s jsou zpracovávány uvnitř databáze a navzájem o sobě nevědí. Může dojít ke konfliktům a budete si muset být jisti, že je budete vzájemně synchronizovat.




  1. Dotaz MySQL trvá déle než 6 sekund

  2. Implementace jediného přihlášení pro tři webové stránky v PHP?

  3. OCIEnvNlsCreate() se nezdařilo. Když se pokusím připojit svou databázi Oracle v php

  4. Použití QT Designer k vytvoření TableView do databáze Postgres