Какую версию 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 не использует блокировки. Вместо этого он позволяет каждой записывающей транзакции создавать новую «версию» БД, которая становится «текущей версией» при фиксации транзакции, при условии, что она не конфликтует с обновлениями, сделанными в то же время другими транзакциями. Так что я подозреваю, что "зависание", которое вы видите, вызвано чем-то другим, хотя чем, я не уверен. (Вы проверили очевидные вещи, например, заполнен ли раздел диска, содержащий БД?)
person
j_random_hacker
schedule
30.06.2009