如何在postgresql中设置与id不同的自动增量字段
Posted
技术标签:
【中文标题】如何在postgresql中设置与id不同的自动增量字段【英文标题】:How to set auto-increment field in postgresql different than id 【发布时间】:2019-06-18 00:34:54 【问题描述】:我在 postgresql 表中有 id 列和 position 列。我想定位自动增量,所以我使用 serial 数据类型添加了 position:
ALTER TABLE tbl ADD COLUMN position serial;
id name position
------- ------- -------
1 S4 4
2 S2 2
3 S3 3
4 S1 1
问题是当我尝试创建新对象时出现以下错误:
org.postgresql.util.PSQLException: error: PSQLException: ERROR: null value in column "position" violates not-null
如何设置position列自动递增?
我的普通对象:
public class Stg
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@NotNull
@Size(max = 20)
@Column(name = "name", length = 20, nullable = false)
private String name;
private Integer position;
【问题讨论】:
你的 Postgres 版本是什么? @TimBiegeleisen 10.1 你的 INSERT 语句是什么? 您的 alter 语句本身不应导致此错误 AFAIK。 @404 我放入语句中的值看起来像 (5, S5, null) 所以位置显然是 null 但是我没有 id 的问题 - 它是生成的 【参考方案1】:第一个你需要创建序列:
CREATE SEQUENCE sys_sequence_name START -9223372036854775808 MINVALUE -9223372036854775808 MAXVALUE 9223372036854775807;
然后创建表,但在声明行参数添加后
CREATE TABLE table_name (
id bigserial primary key,
var_with_seq bigint not null default nextval('sys_sequence_name')
nextval('sys_sequence_name') - 这将使用您创建的序列。
【讨论】:
我应该在 Stg 类的 position 字段中添加一些注释吗? 您可以在私有整数位置上方添加@SequenceGenerator(name="sys_sequence_name") 并添加 @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sys_sequence_name") 我之前尝试过使用此注释,但它不起作用。 postgres 中的序列效果很好,但 java 仍然尝试将 null 放入位置 hmm,尝试添加注解 @SequenceGenerator(name = "sys_seq_position_name", sequenceName = "sys_sequence_name",allocationSize = 1) @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sys_sequence_position_name") @ Column(name="position", insertable=false) private 多头头寸以上是关于如何在postgresql中设置与id不同的自动增量字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GCP 中设置与 MongoDB Docker 容器的连接
如何在 Kubernetes 上的 Quarkus 中设置与 Keycloak 的 OIDC 连接
如何在 PEP484 之后的方法参数中设置与类相同的类型? [复制]