Не удается установить режим чтения-записи транзакции во время ошибки восстановления

#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. Могу ли я сделать этот сервер основным?