作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
表 A 是我所有表的一种唯一序列。
-- Table: public."IdCentral"
-- DROP TABLE public."IdCentral";
CREATE TABLE public."IdCentral"
(
"Id" bigint NOT NULL DEFAULT nextval('"IdCentral_Id_seq"'::regclass),
"Tag" character varying(127) COLLATE pg_catalog."default",
CONSTRAINT "IdCentral_pkey" PRIMARY KEY ("Id")
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
表B是我数据库的任意一张表
-- Table: public."Users"
-- DROP TABLE public."Users";
CREATE TABLE public."Users"
(
"Id" bigint NOT NULL,
"Login" character varying(30) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT "Users_pkey" PRIMARY KEY ("Id"),
CONSTRAINT "PK" FOREIGN KEY ("Id")
REFERENCES public."IdCentral" ("Id") MATCH FULL
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public."Users"
OWNER to dba;
当我想插入到B时,我需要在A中创建一条新记录,将B表名作为标签。
最佳答案
你要的是CURRVAL :
SELECT CURRVAL('IdCentral_Id_seq');
... 这将在插入后为您提供 ID 序列的当前值。为了安全起见,最好在事务中使用它,尤其是当您将它与负载平衡结合使用时:
BEGIN;
INSERT INTO "a" ...
INSERT INTO "b" VALUES ( CURRVAL('IdCentral_Id_seq', ... )
COMMIT;
话虽如此,您似乎正在为您的数据库实现一个“通用 ID”系统。这是每个新 DBA 都尝试过的事情(我做过),而且你最终会花费大量时间重构它不可避免地是一个坏主意。如果出于某种原因您确实需要某种通用 ID,请考虑改用 UUID。
关于postgresql - PGSQL 插入 A 获取要插入 B 的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146295/
我是一名优秀的程序员,十分优秀!