2012-06-06 18 views
6

Tôi đang cố gắng thực hiện changeSet sau đây trong liquibase để tạo chỉ mục. Nếu chỉ mục không tồn tại, nó sẽ âm thầm không thành công:Thay đổi LiquibaseSet with failOnError = "false" luôn được chạy?

<changeSet failOnError="false" author="sys" id="1"> 
    <createIndex unique="true" indexName="key1" tableName="Table1"> 
     <column name="name" /> 
    </createIndex> 
</changeSet> 

Cho đến nay, rất tốt. Vấn đề là, rằng changeSet này không được đăng nhập vào bảng DATABASECHANGELOG và được thực thi mỗi lần chạy bộ hóa lỏng. Theo tài liệu hóa lỏng và ví dụ: this answer từ Nathen Voxland tôi nghĩ rằng changeset nên được đánh dấu là chạy trong bảng DATABASECHANGELOG. Thay vào đó nó không phải là đăng nhập ở tất cả và như tôi đã nói trước khi thực hiện mỗi khi chạy liquibase (và thất bại mỗi lần nữa).

Tôi có thiếu gì đó không?

(Tôi đang sử dụng MySQL như DBMS)

Trả lời

3

Trong answer do Nathen Voxland, ông đề nghị các cách tiếp cận chính xác hơn của việc sử dụng một precondition để kiểm tra trạng thái của cơ sở dữ liệu, trước khi chạy changeset.

Dường như với tôi rằng bỏ qua một thất bại là một ý tưởng tồi .... Có nghĩa là bạn không hoàn toàn kiểm soát cấu hình cơ sở dữ liệu .... Thông số "failOnError" cho phép liquibase tiếp tục. Nó sẽ không phải là một ý tưởng tồi cho một xây dựng để ghi lại một thay đổi như thực thi, nếu trong thực tế nó không phải vì một lỗi xảy ra?

+0

Tôi hoàn toàn với bạn, sử dụng điều kiện tiên quyết là cách tiếp cận phù hợp theo ý kiến ​​của tôi. Sau khi tất cả, đó là những gì tôi đã làm với 'changeSet' của tôi (mặc dù uniqueConstraintExists điều kiện tiên quyết là mất tích, nhưng đó là một thực tế). Tôi chỉ vấp phải sự mong đợi của tôi về thuộc tính 'failOnError =" false "và tôi tự hỏi nếu hành vi được mô tả là lỗi hay một tính năng;) – ebi

+1

Thật không may là điều kiện tiên quyết cho Oracle không null không làm việc cho tôi vì kiểm tra một cột không nullable không được liquibase hỗ trợ. –

+0

Tôi đăng bài này thay mặt cho [dev-null] (https://stackoverflow.com/users/1436741/dev-null), người đã đăng nhận xét này làm câu trả lời; _Điều này được relateted để bình luận của st_jeff trong câu trả lời trước (nhưng tôi không có 50 danh tiếng để làm cho một bình luận): Trường hợp sử dụng khác cho failOnError: Nếu bạn thả một ràng buộc duy nhất trong oracle, hơn chỉ số liên quan được chỉ thả xuống nó mới hơn giới hạn. Vì vậy, một tuyên bố chỉ mục thả sau khi thả ràng buộc có thể dẫn đến một lỗi hay không, tùy thuộc vào độ tuổi của chỉ mục._ – Bugs

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