Как предотвратить запись с опережающей записью только для одной таблицы в PostgreSQL?

Я рассматриваю возможность доставки журнала Запись предварительных журналов (WAL) в PostgreSQL для создания базы данных горячего резервирования. Однако у меня есть одна таблица в базе данных, которая получает огромное количество INSERT / DELETE каждый день, но я не забочусь о защите данных в ней. Мне было интересно, чтобы уменьшить количество создаваемых WAL, есть ли способ предотвратить запись любых действий на одной таблице в WAL?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
2 056
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

Вы можете подумать о переносе таблицы с высокой активностью в совершенно другой экземпляр PostgreSQL. Это кажется радикальным, но я не могу придумать другого способа избежать появления этой активности в ваших файлах WAL.

Предлагаю один вариант ответа на свой вопрос. Есть временные таблицы - «временные таблицы автоматически удаляются в конце сеанса или, возможно, в конце текущей транзакции (см. ON COMMIT ниже)» - которые, я думаю, не генерируют WAL. Даже в этом случае это может быть не идеально, поскольку создание и дизайн таблицы должны быть в коде.

Временные таблицы будут генерировать записи WAL для обновлений системного каталога (pg_class), даже если они не для обновлений данных (я не уверен). Вы можете переместить занятую таблицу в другое место и использовать интерфейс dblink для доступа к ней или переключиться на систему репликации на основе таблиц, такую ​​как Slony.

mjy 25.12.2008 15:34

Я бы рассмотрел memcached для таких случаев использования. Вы даже можете распределить нагрузку по нескольким дешевым машинам.

Просмотрите этот старый вопрос, на который теперь есть лучший ответ. Postgres 9.1 представил «незарегистрированные таблицы», которые представляют собой таблицы, которые не регистрируют свои изменения DML в WAL. См. Документацию для получения дополнительной информации, но, по крайней мере, теперь есть решение этой проблемы.

Смотрите Ожидание 9.1 - НЕЗАПИСАННЫЕ таблицы от depesz и 9.1 документы.

В версиях до 9.1, если вы truncate таблицу перед выполнением вставок, эти вставки также не регистрируются WAL.

a_horse_with_no_name 29.10.2011 18:48

Я считаю, что это верно только в том случае, если вы выполняете усечение / вставку в рамках той же транзакции, но, что более важно, неприменимо к случаю с теплым резервом, когда данные вставки все равно должны поступать в поток WAL для отправки на другой сервер.

xzilla 29.10.2011 19:02

Вы правы насчет транзакции (я думал, что это само собой разумеющееся;)) Хороший момент по поводу теплого резервирования.

a_horse_with_no_name 29.10.2011 20:10

ALTER TABLE mytable SET UNLOGGED

backslash112 30.10.2018 01:34

Другие вопросы по теме