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.rb
của bạn để chứaconfig.active_record.schema_format = :sql
. - Thực hiện
rake db:structure:dump
để lấydb/structure.sql
ban đầu . - Xóa
db/schema.rb
từ 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:dump
thay vìdb:schema:dump
- Sử dụng
db:structure:load
thay 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.