当前位置: 首页 > 知识库问答 >
问题:

使用Liquibase、postgreSQL和序列插入新数据

濮阳振海
2023-03-14

如果我的ID是连续的,我如何使用Liquibase为PostgreSQL进行插入。我尝试以下几点:

<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>

我试着

<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>

错误是:

错误:列“id”中的空值违反了非空约束

共有3个答案

松飞翮
2023-03-14

查看“ColumnConfig”文档。您应该能够设置valueComputed属性,并在其中调用Postgres函数:

<column name="id"  valueComputed="nextval('hibernate_sequence')"/>
季骏祥
2023-03-14

对于我来说,我必须先创建一个序列,然后使用它。

<changeSet>
    <createSequence sequenceName="runtime_name_seq" dataType="bigint" incrementBy="1" maxValue="10000" minValue="1" startValue="1"/>
</changeSet>

<changeSet>
     <createTable tableName="runtime_name">
        <column name="id" type="INTEGER" defaultValueComputed="nextval('runtime_name_seq')">
            <constraints nullable="false" primaryKey="true" primaryKeyName="pk_runtime_name"/>
        </column>
    </createTable>
</changeSet>

这将通过Liquibase创建SQL(我使用的是v3.8.1)

CREATE TABLE public.runtime_name 
(
    index INTEGER DEFAULT nextval('runtime_name_seq') NOT NULL
)
薛枫
2023-03-14

我找到了在Postgres中使用序列(无默认)ID插入数据的解决方案

<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>
 类似资料:
  • 问题内容: 我有两个表声明如下: 我想用一些值填充liquibase changelog文件中的两个表: 在此示例中,由于简单起见,我使用了aaaa和bbbb。我想通过DBMS生成那些UUID。 最好的方法是什么?我必须在变更日志文件中使用SQL还是可以在XML中使用?我更喜欢DBMS独立解决方案,例如XML或JSON。 我的第二个问题是,如何声明带有UUID的列,该列会在插入时创建UUID。就像

  • 我们使用liquibase来管理MySQL数据库的更新、回滚等。 我遇到的一个小好奇是在更新或回滚过程中将值设置为null的过程。示例: 起初,我有点担心“null”会直接插入字符串“null”,但事实证明,liquibase似乎很聪明,可以插入一个空值。

  • 问题内容: 我找不到用Clojure插入Postgres数组类型的方法。 没按我预期的那样工作。错误信息: 即使是我能找到的对SQL的最直接访问也不起作用: 真的不知道这是怎么回事: 当然一定有可能吗?如果不是通过辅助函数,则通过某种方式执行原始SQL。 问题答案: 使用 插入! 要插入字符串向量,您必须(从字符串向量中)创建一个实现java.sql.Array的对象。您可以使用java.sql.

  • 问题内容: 我在使用SQL时遇到了一些问题。我正在尝试在表中插入2个值。 那就是我的查询:INSERT INTO tableinfo(table,date)VALUES(’Sell’,’August‘24’); 但它不起作用。我有类似的东西: 这是非常基本的,所以我不知道为什么它不起作用:( PostgreSQL 9.2.4 问题答案: 问题不是出自INSERT,而是您要发出的无效SQL。首先尝试

  • 本文向大家介绍使用Postgresql 实现快速插入测试数据,包括了使用Postgresql 实现快速插入测试数据的使用技巧和注意事项,需要的朋友参考一下 1.创建常规的企业信息表 2.需要使用的函数 3.常规测试数据插入(5000000条) 在普通pc机上插入,大概完成时间约8小时,过程不可监控,并且cpu/内存占用率高,磁盘基本满负荷动作,读写率基本上都是100%. 4.改进后的方法, 插入(

  • 问题内容: 我希望能够将bigints数组写入要用于Go历史记录的表中。不幸的是,我不能,当我这样做时`sql: converting Exec argument 这是我要插入的表的结构: 问题答案: 使用自定义类型实现database / sql / driver.Valuer: