2017-05-27 11 views
1

データベースを初期化するためのSpringブートアプリケーションの一部としてLiquibaseの移行があります。開発のために、H2メモリ内のデータベースの下で、Liquibaseは問題なく移行を実行しました。インデックスが適用されているテーブルは、ブランドの新しいであることをPostgreSQLデータベースの "重複"インデックスのため、Liquibaseがマイグレーションを実行できません

Caused by: org.postgresql.util.PSQLException: ERROR: relation "idx_channel_id" already exists

注意、および他の指標とはありません:私は、PostgreSQLデータベースに対してそれを実行したときただし、LiquiBaseをは、PostgreSQLと移行に失敗すると、次を返します。 Liquibase移行ファイルの同じ名前。このインデックスの作成を削除すると、次のインデックス作成に失敗します。インデックスを削除した場合(またはPostgreSQLデータベースを呼び出す前提条件で除外された別の移行に移動した場合)、移行は成功しますが、インデックスはまったくありません。

私はこの1頭で私の頭を傷つけていて、私は立ち往生しています。

databaseChangeLog: 
    - changeSet: 
     id: 1 
     author: rmorrison 
     changes: 
     - createTable: 
      tableName: shouts 
      columns: 
       - column: 
        name: id 
        type: bigint 
        autoIncrement: true 
        constraints: 
        primaryKey: true 
        nullable: false 
       - column: 
        name: discord_id 
        type: varchar(18) 
        constraints: 
        nullable: false 
       - column: 
        name: author_id 
        type: varchar(18) 
        constraints: 
        nullable: false 
       - column: 
        name: channel_id 
        type: varchar(18) 
        constraints: 
        nullable: false 
       - column: 
        name: guild_nickname 
        type: varchar(255) 
        constraints: 
        nullable: false 
       - column: 
        name: content 
        type: varchar(2000) 
        constraints: 
        nullable: false 
       - column: 
        name: created 
        type: blob 
        constraints: 
        nullable: false 
     - createTable: 
      tableName: contexts 
      columns: 
       - column: 
        name: id 
        type: bigint 
        autoIncrement: true 
        constraints: 
        primaryKey: true 
        nullable: false 
       - column: 
        name: discord_id 
        type: varchar(18) 
        constraints: 
        nullable: false 
       - column: 
        name: author_id 
        type: varchar(18) 
        constraints: 
        nullable: false 
       - column: 
        name: guild_nickname 
        type: varchar(255) 
        constraints: 
        nullable: false 
       - column: 
        name: content 
        type: varchar(2000) 
        constraints: 
        nullable: false 
       - column: 
        name: created 
        type: blob 
        constraints: 
        nullable: false 
     - createTable: 
      tableName: shouts_contexts 
      columns: 
       - column: 
        name: shout_id 
        type: bigint 
        constraints: 
        nullable: false 
       - column: 
        name: context_id 
        type: bigint 
        constraints: 
        nullable: false 
     - createIndex: 
      indexName: idx_channel_id 
      tableName: shouts 
      unique: false 
      columns: 
       - column: 
        name: channel_id 
        type: varchar(18) 
     - createIndex: 
      indexName: idx_author_channel_id 
      tableName: shouts 
      unique: false 
      columns: 
       - column: 
        name: author_id 
        type: varchar(18) 
       - column: 
        name: channel_id 
        type: varchar(18) 
     - createIndex: 
      indexName: idx_content 
      tableName: shouts 
      unique: true 
      columns: 
       - column: 
        name: content 
        type: varchar(2000) 

EDIT:以下のフルLiquiBaseをマイグレーションIが再構成されたPostgreSQLの文のログを有効にすると、今、これを見ています - これは、すべての後にLiquiBaseをすることはできませんように見えます。引き続き調査しています...

< 2017-05-27 19:13:19.697 EDT > LOG: execute <unnamed>: BEGIN 
< 2017-05-27 19:13:19.698 EDT > LOG: execute <unnamed>: CREATE TABLE public.shouts (id BIGSERIAL NOT NULL, discord_id VARCHAR(18) NOT NULL, author_id VARCHAR(18) NOT NULL, channel_id VARCHAR(18) NOT NULL, guild_nickname VARCHAR(255) NOT NULL, content VARCHAR(2000) NOT NULL, created OID NOT NULL, CONSTRAINT PK_SHOUTS PRIMARY KEY (id)) 
< 2017-05-27 19:13:19.718 EDT > LOG: execute <unnamed>: CREATE TABLE public.contexts (id BIGSERIAL NOT NULL, discord_id VARCHAR(18) NOT NULL, author_id VARCHAR(18) NOT NULL, guild_nickname VARCHAR(255) NOT NULL, content VARCHAR(2000) NOT NULL, created OID NOT NULL, CONSTRAINT PK_CONTEXTS PRIMARY KEY (id)) 
< 2017-05-27 19:13:19.725 EDT > LOG: execute <unnamed>: CREATE TABLE public.shouts_contexts (shout_id BIGINT NOT NULL, context_id BIGINT NOT NULL) 
< 2017-05-27 19:13:19.727 EDT > LOG: execute <unnamed>: CREATE INDEX idx_channel_id ON public.shouts(channel_id) 
< 2017-05-27 19:13:19.727 EDT > ERROR: relation "idx_channel_id" already exists 
< 2017-05-27 19:13:19.727 EDT > STATEMENT: CREATE INDEX idx_channel_id ON public.shouts(channel_id) 
< 2017-05-27 19:13:19.741 EDT > LOG: execute S_1: ROLLBACK 

答えて

1

私はこの問題を解決しました。 PostgreSQLでは、インデックス名はテーブル間で一意である必要があります。私は、同じインデックス名を持つ古いデータを持つ "バックアップ"テーブルを用意していました。私は問題のテーブルを削除し、移行は今問題なく成功します。

関連する問題