具有自动递增 12 位整数的 postgres 列
postgres column with auto increment 12 digit int
是否可以在架构级别定义一个自动递增的 12 位数字列?
所以顺序是000000000000, 000000000001, ...
你在找the serial
datatype吗?那是一个 auto-incrementing 整数。范围从1
到2147483647
,比12位数少了一点。如果你需要更大的东西,你可以切换到 bigserial
,最高可达 9223372036854775807
。
create table mytable (
id serial,
val text
);
insert into mytable (val) values ('foo'), ('bar');
select * from mytable;
id | val
-: | :--
1 | foo
2 | bar
您可以创建指定最小值、最大值和起始值的序列。然后将该序列指定为默认值。您评论说您的需求是“EAN-13,但第一个数字是常数”,据此我假设您实际上需要一个以固定数字开头的 13 位数字。您可以使用该固定数字作为序列的前导值。类似的东西(假设常数第一个数字是 5):
create sequence barcode_seq
increment 1
minvalue 5000000000000
maxvalue 5999999999999
start 5000000000000;
虽然序列倾向于用作 table 键,但这不是必需的。在分配条形码的任何地方都使用上述序列作为默认值。 See fiddle.
是否可以在架构级别定义一个自动递增的 12 位数字列?
所以顺序是000000000000, 000000000001, ...
你在找the serial
datatype吗?那是一个 auto-incrementing 整数。范围从1
到2147483647
,比12位数少了一点。如果你需要更大的东西,你可以切换到 bigserial
,最高可达 9223372036854775807
。
create table mytable (
id serial,
val text
);
insert into mytable (val) values ('foo'), ('bar');
select * from mytable;
id | val -: | :-- 1 | foo 2 | bar
您可以创建指定最小值、最大值和起始值的序列。然后将该序列指定为默认值。您评论说您的需求是“EAN-13,但第一个数字是常数”,据此我假设您实际上需要一个以固定数字开头的 13 位数字。您可以使用该固定数字作为序列的前导值。类似的东西(假设常数第一个数字是 5):
create sequence barcode_seq
increment 1
minvalue 5000000000000
maxvalue 5999999999999
start 5000000000000;
虽然序列倾向于用作 table 键,但这不是必需的。在分配条形码的任何地方都使用上述序列作为默认值。 See fiddle.