3
votes

Insérer de nouvelles données en utilisant Liquibase, postgreSQL et une séquence

Comment faire une insertion pour PostgreSQL en utilisant Liquibase si mes identifiants sont séquentiels. J'essaye avec ce qui suit:

<changeSet author="rparente" id="service-1.1-2019-01-09-01">
        <insert tableName="tenant">
            <column name="id"  value="nextval('hibernate_sequence')"/>
            <column name="description" value="Prueba"/>
            <column name="name" value="antel"/>
            <column name="service_id" value="antel"/>
        </insert>
    </changeSet>

et j'essaye avec

<changeSet author="rparente" id="service-1.1-2019-01-09-01">
        <insert tableName="tenant">
            <column name="id"defaultValueSequenceNext="hibernate_sequence"/>
            <column name="description" value="Prueba"/>
            <column name="name" value="antel"/>
            <column name="service_id" value="antel"/>
        </insert>
    </changeSet>

L'erreur est:

ERREUR: la valeur nulle dans la colonne "id" enfreint la contrainte non nulle


1 commentaires

est défini sans valeur par défaut


3 Réponses :


-1
votes

Consultez la ColumnConfig doc. Vous devriez pouvoir définir une propriété valueComputed et y appeler la fonction Postgres:

<column name="id"  valueComputed="nextval('hibernate_sequence')"/>


1 commentaires

J'ai trouvé la solution pour insérer thnk!



5
votes

J'ai trouvé la solution pour insérer des données dans Postgres avec des ids de séquence (pas de valeur par défaut)

<changeSet author="author_name" id="service-1.1-2019-01-09-01"> 
    <insert tableName="tenant"> 
        <column name="id" valueSequenceNext="name_sequence"/> 
        <column name="description" value="TEST"/> 
        <column name="name" value="test"/> 
        <column name="service_id" value="testl"/> 
        <column name="status" value="ACTIVE"/> 
    </insert> 
</changeSet>


1 commentaires

A travaillé pour nous. Merci :-)



0
votes

Quant à moi, je dois d'abord créer une séquence puis l'utiliser.

CREATE TABLE public.runtime_name 
(
    index INTEGER DEFAULT nextval('runtime_name_seq') NOT NULL
)

Cela créera un SQL par Liquibase (v3.8.1 que j'utilise)

XXX


2 commentaires

Dans Liquibase 3.8. vous pouvez utiliser autoIncrement = "true" et Liquibase générera une colonne identity


Oui, vous pouvez utiliser autoIncrement qui créera une séquence pour vous. Dans ce cas, nous utilisons notre propre séquence