2012-05-12 34 views
9

Khi tôi sử dụng Grails Database Migration Plugin và chạy một dbm-gorm-diff (ví dụ, sau khi cài đặt plugin Xuân An Facebook) Tôi đã nhận được các vấn đề như:Grails Database Migration vấn đề Plugin

Error: Error executing SQL CREATE INDEX `FK609FD5A460CFCC39` ON `facebook_user`(`user_id`): Incorrect index name 'FK609FD5A460CFCC39' 

Dường như chỉ số trong câu hỏi là cả ràng buộc FK và sau đó được sử dụng lại làm chỉ mục sau trong tập lệnh nâng cấp được tạo. Nếu tôi thay đổi tên, do đó loại bỏ các bản sao, tất cả mọi thứ hoạt động tốt. Tôi đang sử dụng Mysql. Tôi có làm điều gì sai?

Cảm ơn.

+0

Bạn đã sử dụng plugin thành công cho đến bây giờ chưa? – David

+0

@David Nó vẫn còn khá mới đối với tôi. Tôi đã thử một vài nâng cấp cơ bản và họ đã làm việc. – skaz

+0

Tôi chỉ nghĩ nếu có thể bạn có 'dbcreate =" .. một cái gì đó .. "' trong tệp DataSource.groovy của bạn, nó có thể xung đột với plugin. Nhưng nếu bạn đã thực hiện nâng cấp thì dường như ít có khả năng hơn. – David

Trả lời

9

Tôi chỉ phát hiện ra rằng nếu tôi chỉnh sửa changelog.groovy để đặt addForeignConstraint sau khi createIndex, nó hoạt động như một sự quyến rũ. Tuy nhiên, một vấn đề khác trong kịch bản thế hệ thay đổi tôi đoán.

+1

Lạ, giải pháp này không hiệu quả đối với tôi. Tôi đã có nhiều 'addForeignConstraint' và 'createIndex'. Thay đổi chìa khóa đã cho phép nó hoạt động mặc dù ... không biết nếu điều đó sẽ có bất kỳ tác dụng phụ sau này. – Weezle

2

Tôi nghi ngờ điều này thực sự liên quan đến MySQL chứ không phải chính plugin đó. Xem lỗi này: http://bugs.mysql.com/bug.php?id=55465

Câu trả lời của Sebastien là một công việc xung quanh.

1

Theo this question/answer, MYSQL tự động lập chỉ mục các cột khóa ngoài. Vì vậy, khi bạn thêm một ràng buộc khóa ngoài, bạn không cần phải xác định chỉ mục. Tôi sử dụng plugin di chuyển db và chỉ xóa các mục 'index' cho các khóa ngoài mà dbm-gorm-diff sinh ra.

Tôi nghĩ rằng điều này tốt hơn một chút so với thay đổi tên, vì điều đó có khả năng tạo nhiều hơn một chỉ mục trên cùng một cột mà chỉ là một sự lãng phí tài nguyên.

Các vấn đề liên quan