как безопасно повернуть postgresql таблицу?

Нахождение в марионеточном обучении в данный момент, таким образом, я должен был бы сказать... что марионетка Возвращающим Labs.

  • Способный использовать Ваши декларации/рецепты на non-vm машинах
  • Это знает о другом VMs
  • Никакая привязка поставщика
  • Масштабы хорошо
  • Открытый исходный код

То, что это не делает, на самом деле породить Ваш VM (что я знаю).

2
задан 3 August 2009 в 10:13
2 ответа

Надлежащий способ сделать это должно настроить разделение таблицы.

http://www.postgresql.org/docs/8.2/static/ddl-partitioning.html

Вы устанавливаете проверочное ограничение на столбец, затем используете правило, управляемое той проверкой к прямым строкам, вставленным в родительскую таблицу в одну из нескольких дочерних таблиц. В Вашем случае я предложил бы еженедельно делить. Если Вы хотите позволить пользователям запросить единственный раздел, Вы просто называете разделы логически - говорят 2009_week_32, или 2009_august_week_1 и имеют их запросы проблем против надлежащей таблицы.

Если Вы хотите, чтобы они запросили несколько таблиц вместе, Вы настраиваете представление, которое делает выбор объединения через несколько таблиц, и пользователи запрашивают представление.

Когда Вы хотите удалить данные, которые больше не требуются, Вы просто изменяете таблицу, чтобы изменить правило и отбросить таблицу, содержащую старые данные.

Это - немного больше работы, чем ответ disabledleopard, но техника довольно распространена через другие механизмы базы данных. Оборотная сторона только к использованию "удаляет, где" на столбце метки времени то, что может потребоваться очень долгое время на больших таблицах и что данные записаны в журнал. Усеченный разработан для обхождения журнала, пишущий проблему, но Вы не можете указать где пункт. Отбрасывание таблицы очень быстро, поскольку Вы не имеете дело с отдельными строками.

У Вас должно будет быть некоторое обслуживание для устанавливания правил для покрытия будущих дат. Некоторые люди пишут сценарий этого ежемесячного журнала (просто проверяют 5 дней до конца месяца, если раздел следующего месяца существует, и если не создают его и выполняют изменить волшебство таблицы изменить правила), в то время как другие просто настраивают несколько месяцев или лет правил заранее и выполняют работы по техническому обслуживанию вручную каждая четверть / год как соответствующие.

4
ответ дан 3 December 2019 в 09:54

моя мысль состояла бы в том, чтобы изменить схему этой таблицы для входа метки времени, данные были вставлены.

ALTER TABLE blah ADD COLUMN entry_time timestamp DEFAULT current_timestamp;

этот путь, что в настоящее время составляет таблицу, не должен изменяться.

Затем Вы - крон, могла затем просто быть эта команда (должен работать с пост-ГРЭС 8.x, но у меня нет сервера, работающего для подтверждения извините),

psql -c "DELETE FROM blah WHERE entry_time < (current_timestamp - interval '14 days') RETURNING *;" > deletelog.$( date "+%Y%m%d").log

Править: Я забыл упоминать, что "ВОЗВРАТ *" бит заставляет psql возвратить полное изложение всех удаленных строк, а также обычного "N строки, удаленные", таким образом, этот журнал мог использоваться с небольшим количеством awk волшебства повторно вставить данные, если удалено преждевременно. Кроме того, контрольные журналы для автоматического удаляет, всегда хорошая идея.

1
ответ дан 3 December 2019 в 09:54

Теги

Похожие вопросы