Liquibase problema al insertar el valor UUID a la base de datos PostgreSQL

Abzelhan:

Estoy usando la primavera de arranque 2 con Liquibase (Core 3.6.2) y mi DB es PostgreSQL. Estoy creando mesa junto a este conjunto de cambios en mi db.changelog-master.xml:

<changeSet author="system" id="1">
    <createTable tableName="test">
        <column name="id" type="UUID">
            <constraints nullable="false"/>
        </column>
        <column name="note" type="VARCHAR(4096)"/>
    </createTable>
</changeSet>

El siguiente conjunto de cambios se utiliza para insertar valores de esta tabla desde un archivo CSV:

<changeSet author="system" id="2">
    <loadData encoding="UTF-8" file="classpath:liquibase/data/test.csv" quotchar="&quot;" separator="," tableName="test">
        <column header="id" name="id" type="STRING" />
       <column header="note" name="note" type="STRING"/>
    </loadData>
</changeSet>

Si especifico tipo UUID en la columna ID en lugar de la CADENA Liquibase me dirá:

loadData type of uuid is not supported. Please use BOOLEAN, NUMERIC, DATE, STRING, COMPUTED or SKIP

El contenido de test.csv archivo:

"id","note"
"18d892e0-e88d-4b18-a5c0-c209983ea3c0","test-note"

Cuando corro aplicación, tabla creada Liquibase y cuando se intenta insertar valores me sale este mensaje:

ERROR: column "id" is of type uuid but expression is of type character varying

El problema está en ExecutablePreparedStatementBase clase que se encuentra en dependencia Liquibase-core, y filas de método en esta clase que crean este error:

private void applyColumnParameter(PreparedStatement stmt, int i, ColumnConfig col) throws SQLException,
        DatabaseException {
    if (col.getValue() != null) {
        LOG.debug(LogType.LOG, "value is string = " + col.getValue());
        stmt.setString(i, col.getValue());
    }

Liquibase utiliza JDBC y PreparedStatement para ejecutar consultas. El problema se debe a que el tipo de columna de la tabla de prueba es UUID , y Liquibase intentó insertar cadena . Y si insertamos los valores manualmente a esta tabla mediante JDBC debemos utilizar setObjectel método del PreparedStatementlugar de setString. Pero, ¿cómo puedo solucionar este problema si este problema localizado en Liquibase-core.jar? ¿Alguien me puede ayudar?

Abzelhan:

Fue muy duele, pero he encontrado solución. Es necesario especificar el parámetro stringtype=unspecifieden su propiedad JDBC URL. Por ejemplo, en application.properties:

spring.liquibase.url=jdbc:postgresql://127.0.0.1:5432/postgres?stringtype=unspecified

Espero que esta respuesta ayude a alguien.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205308&siteId=1
Recomendado
Clasificación