¿Cómo marcar el tipo de actualización de una columna en liquibase?

Trato de actualizar el tipo de columna usando modificación Datos Tipo en una Groovy DSL. Después de ejecutar la actualización de liquibase por liquibase-maven-plugin(versión es 3.8.9), encontré el comentario de la columna desaparecido.

Aquí está mi código:

changeSet(author: "root", id: "20201218-modify-data-type") {
    modifyDataType(columnName: "description", newDataType: "text", tableName: "t_user")

    rollback {
        modifyDataType(columnName: "description", newDataType: "varchar(2000)", tableName: "t_user")
    }
}

No puedo añadir param "remark" en modificarDataType(), porque 'remarks' is an invalid property for 'modifyDataType' changes.

Pregunta hecha hace 3 años, 4 meses, 28 días - Por binarybard


3 Respuestas:

  • La forma en que MySQL implementa sus ALTER TABLE MODIFY COLUMN es como si deja caer la vieja columna y añade una nueva. Esto pierde no sólo comentarios, sino también limitaciones o claves primarias o cualquier otra cosa relacionada con la columna "antigua".

    No hemos añadido todos esos campos en modifyDataType ya que realmente no hay fin a lo que tendríamos que incluir allí. En cambio, si modificas un tipo de datos en mysql necesitas volver a establecer los comentarios, claves primarias, etc. en llamadas separadas.

    Hay una advertencia que producimos para mysql sobre la pérdida de la información principal clave/contraint, pero sólo lo mostramos para los tipos de datos no-varchar para mantener el número de advertencias hacia abajo. Puesto que afecta cosas como comentarios que pueden ser en varchars, probablemente vale la pena eliminar esa parte no-varchar del cheque.

    Respondida el Dec 18, 2020 a las 03:27 - por codemaestro

    Votos positivos: 0 | Votos negativos: 0

  • En Liquibase, no hay un soporte directo para marcar el tipo de actualización de una columna. Sin embargo, hay algunas estrategias que puedes utilizar para indicar que la columna ha sido actualizada. Una forma común de hacerlo es agregando un comentario en la definición de la columna en el archivo de cambios de Liquibase.

    Por ejemplo, puedes modificar tu changeSet para incluir un comentario que indique el tipo de cambio que se ha realizado en la columna:

    groovy
    changeSet(author: "root", id: "20201218-modify-data-type") {
        modifyDataType(columnName: "description", newDataType: "text", tableName: "t_user")
    
        sql("COMMENT ON COLUMN t_user.description IS 'Column type updated to text'")
    
        rollback {
            modifyDataType(columnName: "description", newDataType: "varchar(2000)", tableName: "t_user")
    
            sql("COMMENT ON COLUMN t_user.description IS 'Rollback: Column type updated back to varchar(2000)'")
        }
    }
    

    En este ejemplo, se utiliza la función sql para agregar un comentario a la columna description en la tabla t_user indicando el cambio de tipo de dato realizado. Este comentario servirá como una marca para indicar que la columna ha sido actualizada.

    Recuerda que es importante mantener una documentación clara de los cambios realizados en tu base de datos para facilitar el mantenimiento y la colaboración en el proyecto.

    Respondida el Dec 19, 2020 a las 03:24 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Actualmente, Liquibase no admite la actualización del comentario de columna mediante la modificación del tipo de datos. El comentario de columna se almacena en los metadatos de la columna y no es parte del tipo de datos.

    Existen algunas soluciones alternativas posibles:

    Usa un cambio personalizado: Puedes crear un cambio personalizado que actualice el comentario de la columna por separado. Esto requeriría escribir código Java o Groovy para interactuar con la base de datos directamente. Actualiza el comentario después de la modificación del tipo de datos: Puedes ejecutar una consulta SQL separada después de la modificación del tipo de datos para actualizar el comentario de la columna. Esto se puede hacer utilizando la tarea executeSql en Liquibase Groovy DSL. Usa un complemento de Liquibase:* Hay complementos de terceros que pueden ampliar las funcionalidades de Liquibase. Es posible que exista un complemento que admita la actualización de comentarios de columna.

    Aquí hay un ejemplo que usa una consulta SQL separada para actualizar el comentario de columna:

    groovy
    changeSet(author: "root", id: "20201218-modify-data-type") {
        modifyDataType(columnName: "description", newDataType: "text", tableName: "t_user")
    
        rollback {
            modifyDataType(columnName: "description", newDataType: "varchar(2000)", tableName: "t_user")
        }
    
        executeSql("ALTER TABLE t_user MODIFY COLUMN description TEXT COMMENT 'Updated comment'")
    
        rollback {
            executeSql("ALTER TABLE t_user MODIFY COLUMN description VARCHAR(2000) COMMENT 'Old comment'")
        }
    }
    

    Ten en cuenta que la sintaxis de la consulta SQL puede variar según la base de datos que estés utilizando.

    Respondida el Dec 19, 2020 a las 03:31 - por Gemini

    Votos positivos: 0 | Votos negativos: 0