Size: a a a

2021 February 26

u

uda in javascript_ru
по идее же можно написать select и insert или это только через  ON CONFLICT решается?
источник

u

uda in javascript_ru
а как сделать тоже самое (проверку и инсерт) по полю message_id

типо у пользователя есть id
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
message_id integer;

message_id тоже должен быть уникальный
т.е.
получаю данные пользователя в которых точно есть уникальный message_id
нужно чекнуть есть ли пользователь с таким message_id
если нет, сделать запись
источник

u

uda in javascript_ru
INSERT INTO users(message_id,)
VALUES (111111')
ON CONFLICT DO NOTHING;

так будет создавать каждый раз нового пользователя
источник

j

javascript@conferenc... in javascript_ru
EGD
> INSERT ... ON CONFLICT DO NOTHING
а если ему нужно какую-то логику навесить на случай существования юзера?
источник

j

javascript@conferenc... in javascript_ru
oxpa
on conflict update есть
источник

u

uda in javascript_ru
выходит нужно как-то совместить
-- чекаем есть ли такой пользователь
SELECT EXISTS (
 SELECT 1 FROM users
 WHERE message_id=11111
);

-- создаем запись если его нет
INSERT
INTO users(message_id,)
VALUES(11111);
источник

j

javascript@conferenc... in javascript_ru
oxpa
но вообще, gen_random_uuid будет редко давать одно  и то же число
источник

j

javascript@conferenc... in javascript_ru
oxpa
там зависимость от имени узла и времени вшита, обычно
источник

j

javascript@conferenc... in javascript_ru
oxpa
@Olegov_will_learn а чем не устаивает вариант с on conflict do nothing, я пропустил?
источник

u

uda in javascript_ru
сорян, может как-то не правильно обьясняю
есть таблица пользователя,
в ней есть колонка message_id
в этой колонке данные тоже уникальные, они приходят из стороннего апи

т.е. я получил запрос со стороннего апи с данными пользователя (в них точно есть данные для message_id),
мне нужно проверить есть ли такой пользователь, но чекать я могу только по message_id, так как только оно мне известно.
записать если пользователя не нашел
вернуть пользователя если нашел или после создания
источник

j

javascript@conferenc... in javascript_ru
oxpa
но message id может не быть при этом в базе? или message id всегда есть в базе, а может не быть пользователя?
источник

j

javascript@conferenc... in javascript_ru
oxpa
пока я не вижу связи между message id и пользователем совсем
источник

u

uda in javascript_ru
javascript@conference.jabber.ru
oxpa
@Olegov_will_learn а чем не устаивает вариант с on conflict do nothing, я пропустил?
INSERT INTO users(message_id,)
VALUES (11111)
ON CONFLICT DO NOTHING;

если правильно понял, делаю такой запрос, но записи дублируются ( а не должны)
источник

u

uda in javascript_ru
на данный момент не может быть пользователя без message_id
но в дальнейшем такое может быть
источник

u

uda in javascript_ru
т.е. это интеграция нескольких меседжеров, но на данный момент толко одного.
источник

j

javascript@conferenc... in javascript_ru
oxpa
ну то есть у тебя нет ограничения на уникальность message id, а должно быть?
источник

j

javascript@conferenc... in javascript_ru
oxpa
У тебя в запросе ничего про пользователя нет
источник

u

uda in javascript_ru
да,
но я не знаю как их написать
источник

j

javascript@conferenc... in javascript_ru
oxpa
insert into tablename (field_name) values (values)
источник

u

uda in javascript_ru
))) сорян если что-то не верно обьясняю
источник