gpt4 book ai didi

postgresql - PGSQL 插入 A 获取要插入 B 的 ID

转载 作者:行者123 更新时间:2023-11-29 13:18:54 30 4
gpt4 key购买 nike

表 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com