清洁后无法启动或迁移的flyway

Posted

技术标签:

【中文标题】清洁后无法启动或迁移的flyway【英文标题】:flyway unable to init or migrate after a clean 【发布时间】:2013-06-11 04:45:48 【问题描述】:

我刚刚执行了一个清理操作,我在 prop 文件中添加了一个新架构,然后再次运行 clean 以从 db 中删除该架构,然后当我尝试进行迁移时,它不允许我得到以下信息:

Creating Metadata table: [xx].[schema_version]
Error executing statement at line 17: CREATE TABLE [xx].[schema_version] (
    [version_rank] INT NOT NULL,
    [installed_rank] INT NOT NULL,
    [version] NVARCHAR(50) NOT NULL,
    [description] NVARCHAR(200),
    [type] NVARCHAR(20) NOT NULL,
    [script] NVARCHAR(1000) NOT NULL,
    [checksum] INT,
    [installed_by] NVARCHAR(30) NOT NULL,
    [installed_on] DATETIME NOT NULL DEFAULT GETDATE(),
    [execution_time] INT NOT NULL,
    [success] BIT NOT NULL
);

CREATE INDEX [schema_version_vr_idx] ON [xx].[schema_version] ([version_rank]);
CREATE INDEX [schema_version_ir_idx] ON [xx].[schema_version] ([installed_rank]);
CREATE INDEX [schema_version_s_idx] ON [xx].[schema_version] ([success]);

当我尝试初始化它时,我会得到以下信息:

 Creating Metadata table: [xx].[schema_version]
    Error executing statement at line 17: CREATE TABLE [xx].[schema_version] (
        [version_rank] INT NOT NULL,
        [installed_rank] INT NOT NULL,
        [version] NVARCHAR(50) NOT NULL,
        [description] NVARCHAR(200),
        [type] NVARCHAR(20) NOT NULL,
        [script] NVARCHAR(1000) NOT NULL,
        [checksum] INT,
        [installed_by] NVARCHAR(30) NOT NULL,
        [installed_on] DATETIME NOT NULL DEFAULT GETDATE(),
        [execution_time] INT NOT NULL,
        [success] BIT NOT NULL
    );

    CREATE INDEX [schema_version_vr_idx] ON [xx].[schema_version] ([version_rank]);
    CREATE INDEX [schema_version_ir_idx] ON [xx].[schema_version] ([installed_rank]);
    CREATE INDEX [schema_version_s_idx] ON [xx].[schema_version] ([success]);

ERROR: Occured in com.googlecode.flyway.core.dbsupport.SqlScript.execute() at line 91
ERROR: Caused by com.microsoft.sqlserver.jdbc.SQLServerException: The specified schema name "xx" either does not exist or you do not have permission to use it.
ERROR: Occured in com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError() at line 197

请注意,我已删除所有对象,并且我可以确认它们在我的数据库实例中不存在。

我该如何克服这个问题?我担心在开发和生产环境中使用该工具时,我们不能只删除数据库实例并重新开始。此时我无法使用该工具进行迁移,我不想删除数据库来解决这个问题。

【问题讨论】:

【参考方案1】:

Flyway 的架构创建目前是全有或全无的交易。要么缺少所有架构,然后将创建所有架构,要么至少存在一个架构,然后不会创建任何架构。

对您而言,这意味着您必须自己创建 xx 或先删除其他架构。

【讨论】:

最新版本 4.2.0 还是这样吗?

以上是关于清洁后无法启动或迁移的flyway的主要内容,如果未能解决你的问题,请参考以下文章

宝塔面板mysql无法启动的问题

Spring Boot 应用程序在启动时未运行 Flyway 迁移

Spring 和 Flyway - 在应用程序上下文启动之前迁移

Flyway 迁移无法识别 beforeValidate.sql

Flyway迁移,无法从DataSource获取Jdbc连接

无法为 PostgreSQL 表应用 Flyway 迁移