2017-07-17 22 views
1

表Aは、すべてのマイテーブルの一意のシーケンスの一種です。私はBに挿入したい場合はPGSQLに挿入するIDをBに挿入する

-- 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のテーブル名を渡すことで新しいレコードを作成する必要があります。何をしたい

答えて

1

CURRVAL次のとおりです。

SELECT CURRVAL('IdCentral_Id_seq'); 

...挿入した後、あなたのID列の現在の値を与えるであろう。安全のために、それはあなたが、ロードバランシングと組み合わせている場合は特に、トランザクション内でそれを使用するのが最善です:

BEGIN; 
INSERT INTO "a" ... 
INSERT INTO "b" VALUES (CURRVAL('IdCentral_Id_seq', ...) 
COMMIT; 

言われて、あなたがあなたのために「ユニバーサルID」システムを実装していることを表示されていることデータベース。これは新しいDBAが試みる(私がやった)ことですが、後でリファクタリングに多くの時間を費やすことは避けられません。何らかのユニバーサルIDが本当に必要な理由がある場合は、代わりにUUIDを使用することを検討してください。

関連する問題