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
3 Réponses :
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')"/>
J'ai trouvé la solution pour insérer
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>
A travaillé pour nous. Merci :-)
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
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
est défini sans valeur par défaut