Postgresql 多对多关系插入

Ada*_*kin 5 postgresql sql-insert

我正在使用 Postresql 9.3.5。我在实体“Foo”和“Bar”之间存在多对多关系,我将其建模为如下所示:

CREATE TABLE Foo
(
    id SERIAL PRIMARY KEY NOT NULL,
    .... various columns for foo ....
);

CREATE TABLE Bar
(
    id SERIAL PRIMARY KEY NOT NULL,
    field1 varchar(50) UNIQUE NOT NULL,
    .... various columns for bar ....
);

CREATE TABLE FooBar
(
    fooID int NOT NULL,
    barID int NOT NULL,
    PRIMARY KEY (fooID, barID),
    FOREIGN KEY (fooID) REFERENCES Foo(id),
    FOREIGN KEY (barID) REFERENCES Bar(id)
);
Run Code Online (Sandbox Code Playgroud)

现在我要做的就是在 Foo 中插入一条记录,在 Bar 中插入一条相应的记录,然后插入包含 foo 和 bar 条目 id 的匹配 FooBar 记录。

Catch:我不知道何时插入 Bar 记录(如果它们已经存在),所以目前我的 Bar 插入看起来像:

INSERT INTO Bar(field1, .... other fields for Bar....) 
SELECT 'value1', .... other values for the insert....
WHERE NOT EXISTS (
SELECT 1 FROM Bar WHERE field1 = 'value1')
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但我的问题:如何获取新插入(或现有)Bar 记录的 id,以便我可以将其插入 FooBar 表中?

小智 -1

尝试这个

INSERT INTO Bar(field1, field2,etc...) values(value1, value2,etc...) RETURNING id;
Run Code Online (Sandbox Code Playgroud)

SQL小提琴