在PostgreSQL中,如何将最后一个id插入表中?
在MS SQL中有SCOPE_IDENTITY().
请不要建议我使用这样的东西:
select max(id) from table
Run Code Online (Sandbox Code Playgroud) 我有一个在 id 字段上设置主键的表,该表使用序列生成数字作为其默认值。插入记录时,这可以正常工作并且序列可以正确更新。但是,如果我插入带有 id 字段的记录(例如从备份导入),则序列不会更新。
CREATE TABLE public.my_table (
my_id integer NOT NULL DEFAULT NEXTVAL('my_id_seq'),
name text,
CONSTRAINT my_primary PRIMARY KEY (myid)
);
CREATE SEQUENCE public.my_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
Run Code Online (Sandbox Code Playgroud)
这更新了序列:
INSERT INTO my_table (name) VALUES ('Bart');
Run Code Online (Sandbox Code Playgroud)
这不会:
INSERT INTO my_table (my_id, name) VALUES (12, 'Bart');
Run Code Online (Sandbox Code Playgroud)
当序列达到 12 并且我尝试在没有 ID 的情况下插入时会导致问题。
有没有一个好的/标准的方法来自动执行此操作?我知道MySQL在它的专栏中做到了这一点AUTO_INCREMENT(这就是我遇到这个问题的方式,我来自MySQL)。我在网上查找并找到了一些方法:使用触发器,或者在插入后手动更新序列,但其中许多资源都相当陈旧。也许 9.1 版本有一些功能可以解决这个问题?