Какую версию PostgreSQL вы используете? Следующее предполагает 8.1.8 или более позднюю версию (это может относиться и к более ранним версиям, я не знаю).
Я предполагаю, что вы имеете в виду, что тайм-аут phpPgAdmin истек - бэкэнд PostgreSQL займет столько времени, сколько потребуется для выполнения запроса / обновления. В этом случае возможно, что исходный сеанс еще жив, а запрос UPDATE все еще выполняется. Я предлагаю выполнить следующий запрос (взятый из главы 24 документации PostgreSQL ) на компьютере, на котором размещен серверный процесс PostgreSQL, чтобы проверить, жив ли сеанс:
ps auxwww|grep ^postgres
Должно появиться несколько строк: 1 для главного процесса postmaster
и по 1 для процессов «писатель», «буфер статистики» и «сборщик статистики». Все остальные строки предназначены для процессов, обслуживающих соединения с БД. Эти строки будут содержать имя пользователя и имя базы данных.
Надеюсь, из этого вы можете видеть, что сеанс, в котором вы выполнили оригинальное ОБНОВЛЕНИЕ, все еще висит. Хотя теоретически вы можете найти более подробную информацию, SELECT
в системном представлении pg_stat_activity
, по умолчанию PostgreSQL не настроен для заполнения наиболее полезных полей (таких как current_query
и query_start
). См. Главу 24. Как включить это в будущем.
Если вы видите, что сеанс все еще там, убейте его. Для этого вам необходимо войти в систему как пользователь, выполняющий процесс (обычно postgres
), или как пользователь root - если вы не запускаете сервер самостоятельно, попросите своего администратора базы данных сделать это за вас.
Еще одна вещь: для обновления строк в таблице PostgreSQL избегает использования блокировок. Вместо этого он позволяет каждой записывающей транзакции создавать новую «версию» БД, которая становится «текущей версией», когда транзакция фиксируется, при условии, что она не конфликтует с обновлениями, сделанными тем временем другими транзакциями. Поэтому я подозреваю, что «зависание», которое вы видите, вызвано чем-то другим, хотя я не уверен. (Вы проверили очевидные вещи, например, заполнен ли раздел диска, содержащий БД?)