pg_dump блокирует доступ к базе данных Postgres тем же пользователем - PullRequest
0 голосов
/ 25 апреля 2019

У нас есть приложение Django, работающее в Ubuntu с использованием Postgres DB на том же сервере. Мы ежедневно создаем резервную копию нашей базы данных с помощью следующей команды:

pg_dump -Fc -U user1 -w db_name > ${filepath}`

Проблема в том, что, по-видимому, блокирует доступ на чтение / запись к одной и той же базе данных одним и тем же пользователем (user1), а не нашим приложением Django. Проверка документации гласит, что

pg_dump не блокирует доступ других пользователей к базе данных (читателям или авторы)

Что заставляет меня думать, что, возможно, это блокирует доступ к БД, потому что приложение Django использует того же пользователя. Может ли это случиться? Я не нашел никаких документов, которые бы это разъясняли.

1 Ответ

0 голосов
/ 25 апреля 2019

Если доступ на самом деле заблокирован , т. Е. Вы не получаете ошибки, но приложение зависает, то должно быть, что приложение принимает ACCESS EXCLUSIVE блокировки таблиц.

Это может произойти, если в вашей рабочей нагрузке много операторов TRUNCATE или ALTER TABLE или аналогичных. Они будут заблокированы до тех пор, пока pg_dump, который выполняется в одной транзакции для согласованности, не будет завершен.

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

Попробуйте уменьшить количество блокировок ACCESS EXCLUSIVE в вашей рабочей нагрузке, они также могут предотвратить автоочистку и тем самым повредить вашу базу данных .

...