#postgresql
#postgresql
Вопрос:
Я пытаюсь вставить строку:
BEGIN;
SET TRANSACTION READ WRITE;
INSERT INTO soft.lk(time_added, expiration_date)
VALUES (now(), now() INTERVAL '730 days');
COMMIT;
Но есть следующая ошибка:
cannot set transaction read-write mode during recovery
Что такое восстановление. И как я могу вставить строку?
Версия Postgres: 9.0
Ответ №1:
Вы подключились к серверу реплики чтения в режиме горячего ожидания — потоковой реплике или той, которая использует архивирование WAL, это не имеет значения.
Эти серверы доступны только для чтения. Таким образом, вы не можете записывать в них.
Вместо этого подключитесь к главному серверу.
Комментарии:
1. Есть ли способ узнать IP-адрес главного сервера с сервера-реплики?
2. Нет. Возможно, нет доступного главного сервера (если вы используете архивирование WAL) или он может быть недоступен для записи (если вы выполняете каскадную репликацию). Так что в любом случае это было бы не очень гибко.
3. Может быть, я могу использовать некоторые журналы доступа? если они есть у postgres.
4.
recovery.conf
если это потоковая реплика. Если он просто использует сегменты wal, вам нужно найти, откуда он их получает (см.restore_command
Вrecovery.conf
) и как они туда попадают (зависит от сценариев системного администратора)5. Могу ли я сделать этот сервер основным?