Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Liquibase无法执行迁移,原因是;“重复”;PostgreSQL数据库的索引_Java_Spring_Spring Boot_Liquibase - Fatal编程技术网

Java Liquibase无法执行迁移,原因是;“重复”;PostgreSQL数据库的索引

Java Liquibase无法执行迁移,原因是;“重复”;PostgreSQL数据库的索引,java,spring,spring-boot,liquibase,Java,Spring,Spring Boot,Liquibase,我有一个Liquibase迁移作为我的Spring Boot应用程序的一部分来初始化我的数据库。出于开发目的,在H2内存数据库下,Liquibase执行了迁移,没有任何问题。但是,当我在PostgreSQL数据库上运行它时,Liquibase无法迁移,因为PostgreSQL返回以下内容: 原因:org.postgresql.util.PSQLException:错误:关系“idx\u channel\u id”已存在 请注意,应用索引的表是全新的,在Liquibase迁移文件中没有其他同名索引

我有一个Liquibase迁移作为我的Spring Boot应用程序的一部分来初始化我的数据库。出于开发目的,在H2内存数据库下,Liquibase执行了迁移,没有任何问题。但是,当我在PostgreSQL数据库上运行它时,Liquibase无法迁移,因为PostgreSQL返回以下内容:

原因:org.postgresql.util.PSQLException:错误:关系“idx\u channel\u id”已存在

请注意,应用索引的表是全新的,在Liquibase迁移文件中没有其他同名索引。如果我删除这个索引创建,下一个索引创建就会失败。如果我删除了索引(或者将它们移动到一个单独的迁移中,该迁移通过前提条件被排除在对PostgreSQL数据库的调用之外),迁移将成功,但根本没有索引

我一直在抓我的头在这一个,我卡住了。完全液化迁移如下:

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)
编辑:我重新配置了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
<2017-05-27 19:13:19.697 EDT>日志:执行:开始
<2017-05-27 19:13:19.698 EDT>日志:执行:创建表public.shouts(id BIGSERIAL不为NULL,discord_id VARCHAR(18)不为NULL,author_id VARCHAR(18)不为NULL,channel_id VARCHAR(18)不为NULL,guild_昵称VARCHAR(255)不为NULL,content VARCHAR(2000)不为NULL,created OID不为NULL,CONSTRAINT PK_shouts主键(id))
<2017-05-27 19:13:19.718 EDT>LOG:execute:CREATE TABLE public.contexts(id BIGSERIAL不为NULL,discord_id VARCHAR(18)不为NULL,author_id VARCHAR(18)不为NULL,guild_昵称VARCHAR(255)不为NULL,content VARCHAR(2000)不为NULL,created OID不为NULL,CONSTRAINT PK_contexts主键(id))
<2017-05-27 19:13:19.725 EDT>日志:执行:创建表public.shouts\u上下文(shout\u id BIGINT NOT NULL,context\u id BIGINT NOT NULL)
<2017-05-27 19:13:19.727 EDT>LOG:execute:CREATE INDEX idx_channel_id ON public.shouts(channel_id)
<2017-05-27 19:13:19.727 EDT>错误:关系“idx\U通道id”已存在
<2017-05-27 19:13:19.727 EDT>声明:在公共广播上创建索引idx\U频道id(频道id)
<2017-05-27 19:13:19.741 EDT>日志:执行S_1:回滚

我解决了这个问题。事实证明,PostgreSQL要求索引名在表之间是唯一的。我有一个“备份”表,其中包含具有相同索引名的旧数据,导致了冲突。我删除了有问题的表,现在迁移成功了,没有问题