У меня есть таблица postgres. Мне нужно удалить из него некоторые данные.
Я полагаю, что ...
delete from yourtable
where <condition(s)>
... по какой-то причине не работает. (Не хотите поделиться этой причиной?)
Я собирался создать временную таблицу, скопировать данные, воссоздать индексы и удалить нужные мне строки.
Загляните в pg_dump и pg_restore. Использование pg_dump с некоторыми умными опциями и, возможно, редактирование вывода перед pg_restoring может помочь.
Поскольку вы проводите анализ данных типа «что, если», мне интересно, не лучше ли вам использовать представления.
Вы можете определить представление для каждого сценария, который хотите протестировать, на основе отрицания того, что вы хотите исключить. То есть определите представление на основе того, что вы хотите включить. Например, если вам нужно «окно» для данных, в котором вы «удалили» строки, где X = Y, вы должны создать представление в виде строк, где (X! = Y).
Представления хранятся в базе данных (в системном каталоге) как их определяющий запрос. Каждый раз, когда вы запрашиваете представление, сервер базы данных ищет базовый запрос, который его определяет, и выполняет его (соединяется с любыми другими условиями, которые вы использовали). У этого подхода есть несколько преимуществ:
- Вы никогда не дублируете какую-либо часть своих данных.
- Индексы, уже используемые для базовой таблицы (исходная, «настоящая» таблица), будут использоваться (как считает оптимизатор запросов) при запросе каждого представления / сценария. Нет необходимости переопределять или копировать их.
- Поскольку представление представляет собой "окно" (НЕ фигуру) "реальных" данных в базовой таблице, вы можете добавлять / обновлять / удалять в своей базовой таблице и просто повторно запрашивать сценарии представления без необходимости воссоздавать что-либо как данные меняются со временем.
Конечно, есть компромисс. Поскольку представление является виртуальной таблицей, а не «реальной» (базовой) таблицей, вы фактически выполняете (возможно, сложный) запрос каждый раз, когда получаете к нему доступ. Это может немного замедлить работу. Но может и не быть. Это зависит от многих факторов (размер и характер данных, качество статистики в системном каталоге, скорость оборудования, загрузка и многое другое). Вы не узнаете, пока не попробуете. Если (и только если) вы действительно обнаружите, что производительность неприемлемо низкая, вы можете рассмотреть другие варианты. (Материализованные представления, копии таблиц и т. Д. Все, что меняет пространство на время.)