У мене є таблиця postgres. Мені потрібно видалити з нього деякі дані.
Я припускаю, що ...
delete from yourtable
where <condition(s)>
... з якихось причин не спрацює. (Хочете поділитися цією причиною?)
Я збирався створити тимчасову таблицю, скопіювати дані, відтворити індекси та видалити потрібні мені рядки.
Перегляньте pg_dump та pg_restore. Використання pg_dump з деякими розумними опціями та, можливо, редагування результату перед pg_restoring може зробити трюк.
Оскільки ви проводите аналіз даних типу "що якщо", цікаво, чи не краще вам буде використовувати представлення даних.
Ви можете визначити подання для кожного сценарію, який ви хочете протестувати, виходячи із заперечення того, що ви хочете виключити. Тобто, визначте подання на основі того, що ви хочете Включити. Наприклад, якщо вам потрібне "вікно" з даними, де ви "видалили" рядки, де X = Y, тоді ви створили б вигляд у вигляді рядків де (X! = Y).
Представлення зберігаються у базі даних (у системному каталозі) як визначальний запит. Щоразу, коли ви запитуєте подання, сервер бази даних шукає базовий запит, який його визначає, і виконує його (ANDed з будь-якими іншими умовами, які ви використовували). Цей підхід має кілька переваг:
- Ви ніколи не дублюєте будь-яку частину своїх даних.
- Індекси, які вже використовуються для базової таблиці (ваша оригінальна, "справжня" таблиця), будуть використовуватися (як вважає оптимізатор запитів) під час запиту кожного подання / сценарію. Не потрібно їх перевизначати чи копіювати.
- Оскільки подання є "вікном" (НЕ знімком) для "реальних" даних базової таблиці, ви можете додавати / оновлювати / видаляти свою базову таблицю і просто робити повторний запит сценаріїв перегляду без необхідності відтворювати щось як дані змінюються з часом.
Звичайно, є компроміс. Оскільки подання є віртуальною таблицею, а не "реальною" (базовою) таблицею, ви фактично виконуєте (можливо, складний) запит кожного разу, коли отримуєте до нього доступ. Це може трохи уповільнити ситуацію. Але може і не бути. Це залежить від багатьох питань (розмір і характер даних, якість статистики в системному каталозі, швидкість обладнання, навантаження на використання та багато іншого). Ви не дізнаєтесь, поки не спробуєте. Якщо (і лише якщо) ви виявите, що продуктивність є неприпустимо повільною, ви можете розглянути інші варіанти. (Матеріалізовані подання, копії таблиць, ... все, що торгує простір для часу.)