Bạn cần chuyển từ db/schema.rb thành db/structure.sql .
Vấn đề cơ bản là schema.rb là một đại diện cho cấu trúc của cơ sở dữ liệu như ActiveRecord thấy nhưng ActiveRecord không hiểu nhiều thứ (chẳng hạn như create type , Ràng buộc KIỂM TRA và những thứ khác hiển thị trong execute some_raw_sql các câu lệnh trong di chuyển) mà PostgreSQL thực hiện. Bạn có thể create type tất cả những gì bạn muốn ngoại trừ schema.rb sẽ không bao giờ nhìn thấy nó.
Nếu bạn muốn sử dụng những thứ mà ActiveRecord không hiểu thì bạn phải sử dụng db/structure.sql để lưu trữ cấu trúc cơ sở dữ liệu của bạn. structure.sql lưu trữ cấu trúc của cơ sở dữ liệu khi cơ sở dữ liệu hiểu nó, không phải như ActiveRecord hiểu nó.
Chuyển đổi dễ dàng:
- Cập nhật
config/application.rbcủa bạn để chứaconfig.active_record.schema_format = :sql. - Thực hiện
rake db:structure:dumpđể lấydb/structure.sqlban đầu . - Xóa
db/schema.rbtừ cây thư mục của bạn và kiểm soát sửa đổi. - Thêm
db/structure.sqlđể kiểm soát sửa đổi. - Điều chỉnh thói quen cào của bạn:
- Sử dụng
db:structure:dumpthay vìdb:schema:dump - Sử dụng
db:structure:loadthay vìdb:schema:load
- Sử dụng
Điều đó nói rằng, tôi không chắc enum gốc của PostgreSQL tốt như thế nào các kiểu sẽ tương tác với ActiveRecord như tôi chưa từng làm. enum của AR s
là bản dịch phía máy khách giữa chuỗi và số nguyên nhưng enum s
được xử lý bên trong cơ sở dữ liệu và chúng không biết về nhau. Có thể có xung đột và bạn cần đảm bảo giữ chúng được đồng bộ hóa với nhau.