- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
CREATE OR REPLACE FUNCTION update_last_comment_ids_on_rev_update() RETURNS trigger AS $$
BEGIN
UPDATE comments
SET last_revision_id = NEW.id
FROM comment_revisions
WHERE comments.id_ru = NEW.comment_id
AND comment_revisions.id = comments.last_revision_id
AND comment_revisions.fetch_time < NEW.fetch_time;
IF (NEW.source = 'XYZ') THEN
UPDATE comments
SET last_xyz_revision_id = NEW.id
FROM comment_revisions
WHERE comments.id_ru = NEW.comment_id
AND comment_revisions.id = comments.last_xyz_revision_id AND comment_revisions.fetch_time < NEW.fetch_time;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
gost 04.12.2020 09:44 # 0
OCETuHCKuu_nemyx 17.02.2023 00:03 # 0
defecate-plusplus 04.12.2020 09:59 # 0
gost 04.12.2020 10:09 # 0
Основная проблема сейчас — в возможности существования ревизий-сирот, а именно комментариев гуеста с «Хуза», соответствующие комментарии на ру для которых ещё не загружены (собственно, из-за этого нам в своё время пришлось вводить то самое commentIdStorage). Что с ними делать — хуй знает, пока думаем.
defecate-plusplus 04.12.2020 10:18 # 0
1) кто-то другой вставит в comments значение last_revision_id, если это первая ревизия?
2) джонни с comment_revisions можно избежать, если в comment хранить время фетчя комента
3) если у тебя бывают групповые операции вставки (узнал о новых 50 - заинсертил все одним стейтментом), то логичнее всего переделать на тригр for each statement
gost 04.12.2020 10:29 # 0
То есть мы в одной транзакции добавляем ревизий, потом суём туда коммент и течём (комментов без ревизий существовать не может). В принципе, для оптимизации можно в этом триггере сделать WHEN last_revision_id IS NULL, но пока похуй.
2) Да, как вореант, но что-то не хочется ещё сильнее это говно денормализовывать. В текущем вореанте оно и так заебись работает (с учётом того, что добавления довольно редки):
3) Думал об этом, но решил не ебаться лишний раз. Схема всё равно делается для ГК, а у нас тут больше двух-трёх комментов за период проверки всё равно практически никогда не набегает, обычно один ровно.
gost 04.12.2020 10:32 # 0
guest3 05.12.2020 19:47 # 0