java - liquibase 中的自动增量
问题描述
如何使用 liquibase 在 PostgreSQL 中的列上使用“startWith”设置自动增量属性?
出于某种原因,它总是从 1 开始。我尝试使用自定义序列,但这也无济于事。
<column autoIncrement="true" startWith="100" name="id" type="bigint">
这是我当前的列定义,它不起作用。
编辑:
我想使用 liquibase 从 csv 导入数据。我尝试了以下方法:
<changeSet author="author" id="createSequence">
<createSequence
incrementBy="1"
sequenceName="mytable_id_seq"
startValue="1000"/>
</changeSet>
</changeSet>
<changeSet author="author" id="1-mytable">
<createTable tableName="mytable">
<column name="id" type="BIGSERIAL" defaultValueComputed="nextval('mytable_id_seq')">
<constraints primaryKey="true" primaryKeyName="mytable_pkey"/>
</column>
</createTable>
<loadData encoding="UTF-8"
file="liquibase/data/mytable.csv"
separator=","
tableName="mytable">
</loadData>
</changeSet>
如果我尝试这样做,我会收到以下错误“序列“table_id_seq”的currval 尚未在此会话中定义”,我认为它使用来自公共模式的序列,而不是我设置为 liquibase 的序列。
- 我尝试的另一件事是手动更新它:
ALTER SEQUENCE mytable_id_seq 以 100 重新启动;
在这种情况下,使用的序列是来自公共模式的序列,但我想使用设置为 liquibase 的模式
解决方案
如果您要设置自己的增量和序列,请不要使用 bigserial,它是一个特定于 postgres 的自动增量 bigint,请使用 bigint。“数据类型 smallserial、serial 和 bigserial 不是真正的类型,而只是用于创建唯一标识符列的符号方便(类似于某些其他数据库支持的 AUTO_INCREMENT 属性)。在当前实现中,指定:”
CREATE TABLE tablename (
colname SERIAL
);
是相同的
CREATE SEQUENCE tablename_colname_seq AS integer;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
从这里
推荐阅读
- javascript - RegExp 单词不应以其他单词的特定字符开头,仅查找双引号单词
- reactjs - 如何将动画值传递给导航标题组件?
- powerbi - Power BI - 为文本搜索引用列(使用通配符)
- android - 有没有办法从 sharedpreferences 中删除项目?
- ios - 如何在 iOS App Store 上部署 Vue Native 应用程序?
- azure-machine-learning-studio - Azure 机器学习在运行管道时抛出错误“无效图:节点中的计算目标无效”
- javascript - 是否可以在 next.js api 中运行 Mongoose?
- java - 在当前项目中找不到前缀“依赖”的插件
- database - 如何让存储过程等到所有提交作业完成?
- apache-poi - org.apache.poi:POIFSFileSystem 不可分配给 Linux 上新的新 HSSFWorkbook() 上的 NPOIFSFileSystem