Вторая таблица не вставляется, если первая таблица уже существует - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть пользователь и таблица журнала. Я хочу продолжать добавлять новый журнал, и если имя пользователя не существует в пользователе, добавьте это тоже.

То, что у меня есть, будет вставлено в журнал, только если пользователь не существует. Если пользователь уже существует, журнал не добавляется.

Как я могу это исправить, чтобы заставить работать должным образом? Заранее спасибо.

CREATE TABLE user (
    id serial NOT NULL,
    name char(60) NOT NULL,
    CONSTRAINT user_pk PRIMARY KEY (id),
    CONSTRAINT user_un UNIQUE (name) 
)
CREATE TABLE log (
    id serial NOT NULL,
    name_id int NOT NULL,
    detail char(512) NULL,
    CONSTRAINT detail_pk PRIMARY KEY (id),
    CONSTRAINT detail_user_fk FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE RESTRICT ON UPDATE RESTRICT
)

моя попытка

with ins1 as (
    insert into user (name) 
    values ('myname')
    on conflict do nothing
    returning id as user_id
)
insert into detail (user_id, detail)
select user_id, 'some detail' from ins1;

Следуя примеру из другого вопроса, я изменил ничего не делать на обновить, где false , но по-прежнему не вставляется журнал

with ins1 as (
    insert into "user" (name) 
    values ('myuser')
    on conflict (name) do update
    set name = null where FALSE
    returning id as user_id
)
insert into log (user_id, detail)
select user_id, 'some description' from ins1;

1 Ответ

0 голосов
/ 04 сентября 2018

Вместо того, чтобы выше, Сначала создайте две таблицы, затем напишите хранимую процедуру с параметром. В этой процедуре проверьте, используется ли ранее имя, если все в порядке, сохраните его.

Это обычный метод. Если хочешь, я тоже могу написать процедуру.

...