spring - 在使用 liquibase 填充数据库后,如何更正 Postgres 序列?

标签 spring postgresql jpa liquibase

我正在处理一个将 Spring MVC 与 JPA、Liquibase 和 Postgres 结合使用的项目。我有一些人口脚本 (SQL),其中包含州、城市、邮政编码和地址,在表/值之间具有适当的关系。

<changeSet id="10" author="cezar">
    <sql dbms="postgresql"
         endDelimiter=";"
         splitStatements="true"
         stripComments="true">
    INSERT INTO ..... VALUES (.....);
    </sql>
</changeSet>

好吧,一切顺利,Liquibase 实际上填充了数据库,但是当我需要添加新地址时出现了问题,并且出现了一些违反主键的异常。我知道我需要修复序列,但在应用程序启动时填充数据库后我该怎么做?

提前致谢!

最佳答案

您可以只添加另一个调用 setval() 的 SQL 语句在你的变更集中:

<changeSet id="10" author="cezar">
    <sql dbms="postgresql"
         endDelimiter=";"
         splitStatements="true"
         stripComments="true">
    INSERT INTO ..... VALUES (.....);
    SELECT setval('sequence_name', (select max(id_column) from the_table));
    </sql>
</changeSet>

然而,只有在没有同时对表进行并发插入的情况下,这才会正常工作

关于spring - 在使用 liquibase 填充数据库后,如何更正 Postgres 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255639/

相关文章:

java - Spring 4 和 Java 8 无效字节标记异常

java - 集成流程中的条件处理程序

java - Spring Boot 对于 Java Web 应用程序有哪些缺点?

postgresql - 我可以在 PostgreSQL 中获得 CSV header 但没有行数吗?

java - 我可以实现自己的 JPA 吗?

hibernate - 什么会导致Hibernate InvalidStateException

java - 仅在序列化期间使用@JsonIgnore,而不是反序列化

ruby-on-rails - 在 OSX 上安装 PostgreSQL 以进行 Rails 开发

sql - 棘手的 postgresql 查询优化(带排序的不同行聚合)

java - JPA 无交易 Activity