Как вытащить уникальные слова в PostgreSQL
coalesce(case when main_parse_user.bio is distinct from EXCLUDED.bio
and EXCLUDED.bio is not null
then concat(trim(main_parse_user.bio), ' ', trim(EXCLUDED.bio))
else main_parse_user.bio end)
Эта часть моего кода для добавление в бд
Туда приходит текст и код должен сравнить то что пришло и то что в бд и надо брать из текста который вводился те слова которых нету в бд
ПРИМЕР
То что в базе
|id|bio|
| 1|qwerty|
INPUT
|id|bio|
| 1|qwerty new|
База после INSERT
|id| bio |
| 1|qwerty | new |
Как можно такое сделать?
Полный код
INSERT INTO main_parse_user ("user_id","group_id", "username","bio", "first_name","url") VALUES (%s,%s,%s,%s,%s,%s)
ON CONFLICT (user_id)
DO UPDATE SET (group_id,username,bio,first_name) = (EXCLUDED.group_id,EXCLUDED.username, coalesce(case when main_parse_user.bio is distinct from
EXCLUDED.bio and EXCLUDED.bio is not null then
concat(trim(main_parse_user.bio), ' | ', trim(EXCLUDED.bio)) else main_parse_user.bio
end ),EXCLUDED.first_name)'''
НОВАЯ ЧАСТЬ
INSERT INTO main_parse_user
("user_id","group_id", "username", "bio", "first_name","url")
VALUES (%s,%s,%s,%s,%s,%s) ON CONFLICT (user_id)
DO UPDATE SET (group_id,username,bio,first_name) = (EXCLUDED.group_id,EXCLUDED.username,
(SELECT array_agg(f order by f) FROM (SELECT * FROM UNNEST(main_parse_user.bio) as x(f) UNION
SELECT * FROM UNNEST(EXCLUDED.bio) as x(f)) d),EXCLUDED.first_name)
Все ли я правильно сделал в своем варианте?
У меня код выдает ошибку как InvalidTextRepresentation
Cтруктура БД
CREATE TABLE IF NOT EXISTS public.main_parse_user
(
id bigint NOT NULL DEFAULT nextval('main_parse_user_id_seq'::regclass),
user_id bigint,
group_id bigint,
username character varying(150) COLLATE pg_catalog."default" NOT NULL,
bio text[] COLLATE pg_catalog."default" NOT NULL,
first_name text COLLATE pg_catalog."default",
url text COLLATE pg_catalog."default",
CONSTRAINT main_parse_user_pkey PRIMARY KEY (id),
CONSTRAINT main_parse_user_user_id_key UNIQUE (user_id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.main_parse_user
OWNER to postgres;
Источник: Stack Overflow на русском