Обнаружение ошибки SQL 40001 в Dbeaver - PullRequest
0 голосов
/ 24 февраля 2020

Я выполняю запрос на подсчет *, который выполняется правильно, но по какой-то причине, когда я пытаюсь экспортировать его в CSV, я сталкиваюсь с ошибкой SQL [40001]. Любые идеи, что проблема может быть? enter image description here

1 Ответ

1 голос
/ 25 февраля 2020

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

PostgreSQL должен сделать выбор: либо отложить применение изменений из основного, либо отменить запрос, блокирующий репликация.

Как ведет себя PostgreSQL, определяется параметром max_standby_streaming_delay. Значение по умолчанию дает запросу 30 секунд до окончания sh, прежде чем он будет отменен.

У вас есть три варианта:

  1. Повторите запрос и надеюсь, что на этот раз он будет выполнен успешно .

  2. Увеличение max_standby_streaming_delay в режиме ожидания.

    Риск, который вы запускаете, заключается в том, что репликация отстанет.

  3. Установите для параметра hot_standby_feedback значение on в режиме ожидания, тогда основной не будет VACUUM версий строк, которые могут все еще понадобиться резерву.

    Риск, который вы запускаете, - это раздувание таблицы на основном сервере, потому что автовакуум не может делать свою работу.

...