Как удалить из таблицы более качественным способом - PullRequest
0 голосов
/ 20 октября 2019

Мне нужно удалить несколько строк с 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, поэтому мне не нужно самостоятельно присоединяться. Затем удалите исходную таблицу и переименуйте новую таблицу. Исходная таблица будет продолжать получать новые строки. Мне нужно убедиться, что когда я это сделаю, теперь строки будут проигрывать. Какой лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...