Search code examples
postgresqlliquibasechangelog

Liquibase databasechangelog xml file - how to create enum in postgresql


I use liquibase and I want to create enum in my xml file (PostgreSQL).

As an example below changelog file (only a piece of the file) that creates new table:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd
    http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <changeSet id="r3.3.0_table_creation_research_document  "
               author="anonim">
        <createTable tableName="research_document">
            <column name="id" type="bigint">
                <constraints primaryKey="true"
                             primaryKeyName="research_document_pkey" nullable="false" />
            </column> 

I can't find any info/examples in Internet!


Solution

  • I don't think liquibase supports enum for postgres natively in the xml format. However, since it is possible in postgres, you could always use liquibase's formatted sql instead of xml:

    --liquibase formatted sql
                    
    --changeset ronak:1
    CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
    CREATE TABLE person (
    name text,
    current_mood mood
    );  
    --rollback drop table person;