具有自动递增 12 位整数的 postgres 列

postgres column with auto increment 12 digit int

是否可以在架构级别定义一个自动递增的 12 位数字列?

所以顺序是000000000000, 000000000001, ...

你在找the serial datatype吗?那是一个 auto-incrementing 整数。范围从12147483647,比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.