Sintaxis adecuada como se detalla en el manual :
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;
Donde pk_id
es cualquier (combinación de) columna(s) que es única . Podría ser user_id
, search_time
en su caso, o, más convenientemente, una clave principal sustituta.
Por solo un sencillo user_id
puedes simplificar a:
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;
Por otro lado, para tratar con múltiples usuarios a la vez, debe agregar PARTITION BY
a su función de ventana:
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;