【问题标题】:Flyway clean failing to clean due to drop constraint由于跌落限制,Flyway clean 无法清洁
【发布时间】:2019-09-12 23:02:18
【问题描述】:

我正在尝试clean 我的 MSSQL 数据库。我在我的一些数据库上工作,但在其中一个数据库上,我收到以下错误。

Unable to clean schema [dbo]
----------------------------
SQL State  : S0001
Error Code : 3717
Message    : Cannot drop a default constraint by DROP DEFAULT statement. Use ALTER TABLE to drop a constraint default.

        at org.flywaydb.core.internal.database.base.Schema.clean(Schema.java:151)
        at org.flywaydb.core.internal.command.DbClean$3.call(DbClean.java:172)
        at org.flywaydb.core.internal.command.DbClean$3.call(DbClean.java:169)
        at org.flywaydb.core.internal.jdbc.TransactionTemplate.execute(TransactionTemplate.java:74)
        at org.flywaydb.core.internal.command.DbClean.cleanSchema(DbClean.java:169)
        at org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:113)
        at org.flywaydb.core.Flyway.doClean(Flyway.java:1488)
        at org.flywaydb.core.Flyway.access$300(Flyway.java:85)
        at org.flywaydb.core.Flyway$3.execute(Flyway.java:1506)
        at org.flywaydb.core.Flyway$3.execute(Flyway.java:1499)
        at org.flywaydb.core.Flyway.execute(Flyway.java:1711)
        at org.flywaydb.core.Flyway.clean(Flyway.java:1499)
        at org.flywaydb.commandline.Main.executeOperation(Main.java:157)
        at org.flywaydb.commandline.Main.main(Main.java:108)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot drop a default constraint by DROP DEFAULT statement. Use ALTER TABLE to drop a con
straint default.
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:254)
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1608)
        at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:578)
        at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:508)
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7240)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2869)
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:243)
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:218)
        at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(SQLServerPreparedStatement.java:493)
        at org.flywaydb.core.internal.jdbc.JdbcTemplate.execute(JdbcTemplate.java:215)
        at org.flywaydb.core.internal.database.sqlserver.SQLServerSchema.doClean(SQLServerSchema.java:294)
        at org.flywaydb.core.internal.database.base.Schema.clean(Schema.java:149)
        ... 13 more

我的许多表对某些列都有默认约束。但我看不出如何改变 flyway 如何摆脱这些限制。我找不到有关如何解决此问题的任何信息。如果您有任何见解,请提供帮助。谢谢!

【问题讨论】:

  • 此错误意味着服务器正在以某种形式运行 SQL Server 2019。在 SQL Server 2017 中,在线书籍建议将从 SQL Server 的“下一个版本”中删除 DROP DEFAULT。如果是这种情况,那么flyway 似乎与 SQL 2019 不兼容。
  • 嗨@LaughingVergil。我实际上正在运行 SQL Server 14.0.2002.14(又名 2017)。

标签: sql-server database-migration flyway


【解决方案1】:

请在issue tracker 中提出问题,并提供如何重现的确切步骤,包括触发此问题的最小 SQL 文件。

【讨论】:

    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2012-11-12
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多