Мне нужно удалить несколько строк с ROW_NUMBER. Поскольку Postgres не поддерживает удаление в подзапросе, мне нужно сделать:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER(PARTITION BY col1, col2 ORDER BY col3 DESC, col4 DESC) AS rank_id FROM {working_table}
)
DELETE FROM {working_table} AS s
USING cte AS t
WHERE
s.col1 = t.col1
AND s.col2= t.col2
AND s.col3 = t.col3
AND …
AND rank_id > 3
AND s.time <= …
, то есть я должен выполнить самостоятельное соединение со всеми столбцами PK. Перф очень плохо, когда это большой стол. Я думаю, чтобы вставить другую таблицу только с SELECT, поэтому мне не нужно самостоятельно присоединяться. Затем удалите исходную таблицу и переименуйте новую таблицу. Исходная таблица будет продолжать получать новые строки. Мне нужно убедиться, что когда я это сделаю, теперь строки будут проигрывать. Какой лучший способ сделать это?