Правилен синтаксис както е описано в ръководството :
DELETE FROM history_user h
USING (
SELECT pk_id, row_number() OVER (ORDER BY search_time DESC) AS rn;
FROM history_user
WHERE user_id = 188
) sub
WHERE sub.rn > 5
AND h.pk_id = sub.pk_id;
Където pk_id
е всяка (комбинация от) колона(и), която е уникална . Може да е user_id
, search_time
във вашия случай - или, по-удобно, сурогатен първичен ключ.
Само за едница user_id
можете да опростите до:
DELETE FROM history_user h
USING (
SELECT pk_id
FROM history_user
WHERE user_id = 188
ORDER BY search_time DESC
OFFSET 5
) sub
WHERE h.pk_id = sub.pk_id;
От друга страна, за справяне с многота потребители наведнъж, трябва да добавите PARTITION BY
към вашата функция за прозорец:
DELETE FROM history_user h
USING (
SELECT pk_id, row_number() OVER (PARTITION BY user_id
ORDER BY search_time DESC) AS rn;
FROM history_user
) sub
WHERE sub.rn > 5
AND h.pk_id = sub.pk_id;