Я решил, что вместо того, чтобы удалять строки из базы данных postgres, я скорее спрячу строки так, чтобы в случае, если строки были удалены случайно, я все равно могу их восстановить. Каков наилучший способ скрыть строки из базы данных? Рекомендуете ли вы создать столбец с именем «Активный» и присвоить ему значение 1 или 0, 1 означает «активное», а «0» - удалить и скрыть. Я также использую sqlalchemy, если это имеет значение.Скрыть строки в postgres
ответ
Это практически единственный способ сделать это без фактического удаления строк.
Вы можете создать представление, показывающее только активные записи, поэтому вам не нужно забывать добавлять это в предложение where каждого запроса.
Вы можете скрыть реальную таблицу, создать представление и использовать правила для вставки, обновления и удаления.
Предположим, у вас есть таблица сеансов. Я бы создал таблицу под названием session_table, которая содержит все данные и «active» -column. Тогда у вас есть вид, называемый сеансом (CREATE view session AS SELECT [все поля withtout active] FROM session_table WHERE active = TRUE), как упоминал Грег.
Теперь вы можете создать правило: Если вы хотите удалить строку в сессии, вы хотите обновить строку в sessions_table вместо:
CREATE RULE delete_session ON DELETE к сеансам DO ВМЕСТО UPDATE sessions_table SET активен = FALSE WHERE id = OLD.id;
Для вставки, вам необходимо:
CREATE RULE insert_session ON INSERT к сеансам DO ВМЕСТО INSERT INTO sessions_table (..., активные) VALUES (..., TRUE);
И, наконец, мы имеем
CREATE RULE update_session ON UPDATE к сеансу DO ВМЕСТО UPDATE sessions_table SET ... WHERE ID = new.id и активный = TRUE;
Теперь вы называете работу полностью сессиями и не должны беспокоиться об активной колонке.
Гораздо лучше иметь отметку «ValidBefore», чем флаг.
Предположительно, причина, по которой вы хотите их сохранить, не доверяет вашей логике или пользователям удаления, и вы хотите восстановить строки, удаленные при обнаружении ошибки.
Это намного проще сделать, если у вас есть метка времени или аналогичный, а не только флаг.
Как насчет наличия таблицы hidden_rows_table, которая имеет ту же структуру, что и активная таблица? Затем вы можете перемещать строки из активной таблицы в hidden_rows_table при их удалении. Чтобы выбрать все строки (как скрытые, так и активные), вы можете использовать UNION.
Это решение особенно хорошо, если у вас есть огромное количество данных, например, в хранилище данных, и вас беспокоит производительность, например, создание новых индексов.
- 1. разделительные строки в postgres
- 2. как скрыть чувствительные столбцы postgres
- 3. Обновление строки в postgres из другой строки
- 4. Выберите номер строки в postgres
- 5. postgres - транспонировать столбцы в строки
- 6. транспонировать столбцы в строки - postgres
- 7. Postgres: обнаруживать осиротевшие строки
- 8. Скрыть строки в сетке
- 9. Скрыть строки в .bash_profile
- 10. Производительность Postgres: Статическая длина строки?
- 11. Postgres: удалить второе вхождение строки
- 12. Как агрегировать Postgres строки таблицы
- 13. Скрыть строки в Sublime Text
- 14. Динамически скрыть строки в NSTableView
- 15. Как скрыть строки в GridView
- 16. Скрыть строки кода в MATLAB
- 17. Как скрыть строки в displaytag?
- 18. Скрыть пустые строки в картоне
- 19. Скрыть пустые строки в DataGrid
- 20. Postgres выбирая из строки таблицы
- 21. Удаление строки в определенном номере строки в Postgres
- 22. Выбор строки после нескольких группировок в Postgres
- 23. шаблон соответствия в конце строки (Postgres)
- 24. ошибка обновления строки в таблице Postgres
- 25. Postgres: Развернуть столбец JSON в строки
- 26. Пустые строки в массиве строк postgres, удаляемых
- 27. Как вы цитируете строки в Postgres
- 28. Извлечение слов из строки в postgres SQL
- 29. затронутые строки в Postgres с CodeIgniter
- 30. Извлечь подстроку из текстовой строки в postgres
Наилучший подход здесь - объединить временную метку ValidBefore с предложениями по выбору и триггерам здесь. –