Может ли INSERT с ON CONFLICT в PostgreSQL быть условным в SQL - PullRequest
0 голосов
/ 11 марта 2020

У меня есть следующий запрос SQL:

WITH inserted_id AS (
    INSERT INTO users (email,name,user_id,user_name,source)
        VALUES (
                'a',
                'b',
                'c',
                'd',
                'e')
        ON CONFLICT (email) DO UPDATE SET
            user_id='c',
            user_name='d',
            source='e'
        RETURNING id AS users_id
)
INSERT INTO users_groups (users_id, groups_id)
SELECT users_id, 5 FROM inserted_id;

Я бы хотел, чтобы второй INSERT до users_groups был обусловлен выполнением первого INSERT без каких-либо конфликтов - то есть часть ON CONFLICT не запускается. Можно ли это сделать с помощью запроса или что мне нужно изменить?

1 Ответ

0 голосов
/ 11 марта 2020

Вы что-то делаете в on conflict, поэтому строка будет возвращена.

Я думаю, что вы можете сделать:

INSERT INTO users_groups (users_id, groups_id)
    SELECT users_id, 5
    FROM inserted_id
    WHERE users_id <> 'aa';

Если вы можете, вы можете просто использовать on conflict do nothing. Тогда идентификатор не будет возвращен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...