PostgreSQL中与SQL Server的IDENTITY(1, 2)相等的内容是什么?

5

有一个样例数据表:

create table testingCase (
id integer not null GENERATED ALWAYS AS IDENTITY,
constraint pk_testingCase primary key (id),
description varchar(60)
);

我希望id能够每次自动增加2(例如),在SQL Server中可以使用IDENTITY (1, 2)实现。

那么在PostgreSQL中如何实现呢?


3
你可以通过手动声明一个序列来实现这个,但我会质疑你为什么想要这样做。这听起来很像你想让两个表具有相同的“id”,一个是偶数,一个是奇数。可能有更好的解决方案--比如继承--可以实现你想要的功能。 - Gordon Linoff
你为什么想要步长为2?如果你想让多个表共享相同的ID号码,你可以在SQL Server和PostgreSQL中使用单个序列。 - Panagiotis Kanavos
@GordonLinoff 我只是出于好奇问一下,因为我刚接触Postgres,并且因为我过去发现MSSQL的AUTO INCREMENT很有用。 - Outman
SQL Server也有序列。不过,除了1之外的增量并不常见。你如何在SQL Server中使用这样的增量? - Panagiotis Kanavos
2
我认为在任何数据库中,我从来没有遇到过增量不是1的IDENTITY。原因很简单,由于实现的原因,无论使用什么增量(并且RESEED可以重新设置为任何值),IDENTITY都不能保证连续或“无间隙”的值,这使得依赖增量仅提供特定值成为设计错误,或者至少会给维护带来麻烦。IDENTITY:有用。增量的创造性值:没那么有用。 - Jeroen Mostert
1个回答

5

使用类似于CREATE SEQUENCE的序列选项。

create table testing_case (
    id integer not null generated always as identity (increment by 2),
    constraint pk_testing_case primary key (id),
    description varchar(60)
);

insert into testing_case (description) 
values ('a'), ('b'), ('c')
returning *

 id | description 
----+-------------
  1 | a
  3 | b
  5 | c
(3 rows)

谢谢。我感谢上面评论中的关心,但我只想知道这个答案,而不是它的用例。 - Outman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接