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)
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
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ợ. –
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