当前位置: 首页 > 知识库问答 >
问题:

Liquibase在RedShift数据库中的应用问题

锺离辰沛
2023-03-14

我一直试图将这个(https://github.com/liquibase/liquibase-redshift/releases)插件用于我的Redshift数据库,但一直未能使其工作。我主要面临两个问题。

  1. 无效操作:“tag”处或附近有语法错误。通过手动创建databasechangelog表,我解决了这个问题。
  2. 将记录插入databasechangelog表时出错,原因是LB在insert查询中使用了now()函数

我看到这两个问题都被标记为已修复(https://github.com/liquibase/liquibase-redshift/issues/9),然而,我仍然面临这些问题。由于项目的性质,我不能在jar文件中手动进行任何更改。因此,如果有人能对此提供任何见解,我将不胜感激。我还在changelog.xml文件中使用dbms=“redshift”

事先谢谢你的帮助。

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
    <changeSet author="devsh0" id="9.9.9.9" logicalFilePath="LOGICALPATH" runOnChange ="true" >
         <sqlFile 
            path="src/main/dbo/app-code.SQL"
            dbms="RedshiftDatabase"
            stripComments="true"
        />
    </changeSet>
</databaseChangeLog>
create table Test_Table
(
  col1   VARCHAR(3) not null,
  col2   VARCHAR(20) not null,
  col3   VARCHAR(50) not null
)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>local_redshift</groupId>
  <artifactId>local_redshift</artifactId>
  <version>0.0.1-SNAPSHOT</version>
<repositories>
    <repository>
      <id>redshift</id>
      <url>https://s3.amazonaws.com/redshift-maven-repository/release</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.10.0</version>
    </dependency>
    <dependency>
       <groupId>com.amazon.redshift</groupId>
       <artifactId>redshift-jdbc42</artifactId>
       <version>1.2.43.1067</version>
    </dependency>
    <dependency>
        <groupId>org.liquibase.ext</groupId>
        <artifactId>liquibase-redshift</artifactId>
        <version>3.10.0</version>
    </dependency>
    <!--dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.8</version>
    </dependency>  -->
</dependencies>
 <build>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.4.2</version>
                <configuration>
                   <propertyFile>src/main/liquibase.redshift.properties</propertyFile>
                   <changeLogFile>src/main/changelog/changelog-1.0.0.0.1.xml</changeLogFile>
                  <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>```


共有1个答案

韶宏邈
2023-03-14

在您的changelog.xml中,它是dbms=“redshiftdatabase”-它应该是dbms=“redshift”:

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
    <changeSet author="devsh0" id="9.9.9.9" logicalFilePath="LOGICALPATH" runOnChange ="true" >
         <sqlFile 
            path="src/main/dbo/app-code.SQL"
            dbms="redshift"
            stripComments="true"
        />
    </changeSet>
</databaseChangeLog>

由于错误地指定了RedshiftDatabase将不会被使用。

 类似资料:
  • 问题内容: 我正在尝试将Django多数据库配置与MYSQL用作默认数据库,将redshift用作分析数据库。我的配置看起来像这样: 当我尝试迁移分析应用程序时,请使用以下命令 我看到以下错误: 关于如何解决此问题的任何想法?我正在使用和 问题答案: 特定的问题是:Django想要创建一个具有主键的迁移管理表来跟踪迁移历史。Redshift不支持。 但是,这种方法更普遍的问题是,您真的不希望在Re

  • 我在spring-boot应用程序中为数据库配置了以下liquibase配置。 最初,这些YAML脚本是在应用程序启动和数据库创建时执行的,现在我想更新一列的数据类型,所以我需要更新现有的创建表。列配置的YAML,或者需要创建另一个具有不同名称的文件,并将条目添加到“db.changelog-master.yaml”文件中。 请建议,谢谢

  • 我正在尝试迁移到Spring Data R2DBC,我找不到对Amazon Redshift数据库的支持,如果有支持,有人可以帮助我吗? 下面是spring文档url,它支持的数据库很少,但红移不在列表中。https://spring.io/projects/spring-data-r2dbc

  • 我们有一个现有的数据库在生产。我们已经决定使用liquibase进行所有进一步的更新,并创建任何新的数据库(如开发或集成)。 如果我们在生产上执行liquibase,它将尝试进行所有的完全更改,即使是那些已经存在的更改,这不会发生,因为除了两个新的更新之外,生产中已经有了所有的更改。现在我们想使用liquibase将这两个更改单独更新到产品中。 我们怎么能做到这一点?

  • 我的应用程序有以下场景: 1个生产服务器 1个测试服务器 n开发计算机 对于数据库迁移,我们使用Hibernate Schema Update For the Schema和DBUnit来填充所有生产数据(在所有服务器/计算机上)。当模式更新完成后,我为新模式生成一个新的DTD文件,这样我就可以重新导入DBUnitXML。应用程序在启动时使用XML文件更新数据库(仅在开发和测试服务器/计算机上!)

  • 我试过使用和不使用。表和已成功创建,并包含迁移(insert-books)。 迁移是通过的,因为如果我添加了一个无效的insert(到一些不存在的表中),我会得到异常: 如何使用LiquiBase用insert-books.sql脚本中的数据填充数据库?