2015-04-28 6 views
0

У меня есть триггеры PostgreSQL, которые я бы хотел написать, которые используют разумное количество CPU, а затем NOTIFY, если произошел сложный шаблон. Эти триггеры динамически создаются приложением. (Функция, которую он вызывает, не обязательно должна быть динамической, но только аргументы, переданные триггеру.)PostgreSQL-реплика, где я могу создавать триггеры?

Возможно ли установить поточную репликацию PostgreSQL, чтобы был основной сервер, где я выполняю все мои " «нормальные» записи и набор прочитанных реплик, к которым я почти полностью подключаюсь, чтобы читать ... но где я также могу создавать триггеры, которые работают только на прочитанной реплике? т. е. это приведет к перегрузке загрузки ЦП от стартера к потенциально большому количеству реплик. (Я бы потенциально использовать pg_temp для функции, как описано в this answer.)

Когда я пытаюсь это, например, с Amazon RDS репликами для чтения, любая попытка создать даже pg_temp.* функции на чтение реплики Unsurprisingly терпит неудачу с cannot execute CREATE FUNCTION in a read-only transaction, но, возможно, есть ли другой способ настроить поточную репликацию, чтобы это было возможно?

ответ

2

Можно ли настроить PostgreSQL потоковой репликации, так что есть мастер-сервер, на котором я все мои «нормальный» пишет, и множество прочитанных реплик, которые я связываю почти полностью, чтобы сделать чтение ... но где я могу также создавать триггеры, которые работают только с прочитанной репликой?

Нет, это не так. Потоковая репликация выполняется на уровне блоков. Он не знает, какие заявления изменили, какие строки, где. Это также строго для чтения. На самом деле строго - вы ничего не можете сделать, что изменяет системные каталоги, такие как pg_class или pg_proc даже временно.

Возможно, вы захотите изучить Лондисте. Если вы создаете триггер, то make it ENABLE REPLICA он может запускать записи, созданные Londiste от мастера.

BDR project также может использоваться для чтения-реплик. Он еще не поддерживает триггеры запуска при записи в нисходящую строку, но это практично реализовать, это просто не было приоритетом развития.

Смежные вопросы