2017-02-01 5 views
0

Я пытаюсь создать таблицу в моей базе данных Postgres. Я использую pgadmin в версии 1.18.1. Версия Postgres на сервере - 8.3.12.Создать таблицу, никогда не заканчивающуюся

Когда я выполняю инструкцию create table, обычно это делается за несколько мс, но иногда это продолжается несколько минут, и я останавливаю его. Затем я должен перезапустить сервер Postgres, что нежелательно. Я попытался создать таблицу, прежде чем люди придут на работу, но это тоже не сработало.

Есть ли схожие проблемы? Как я могу это исправить? Сервер перезагрузки иногда очень проблематичен.

+2

Вероятно, он ждет блокировки: https://wiki.postgresql.org/wiki/Lock_Monitoring Но почему вы используете старую и неподдерживаемую версию Postgres? –

+0

Это не зависит от меня ... Наше управление не позволяет обновлять. У нас мало войны, когда мы хотели обновить Java от версии 6 до 8 ... – mdolata

+0

У вас есть autovacuum работает? (вакуум не запускался автоматически до pg-8.4, IIRC) – wildplasser

ответ

0

Некоторые программы администрирования баз данных с поддержкой Postgres запускаются в режиме noautocommit по умолчанию. Это означает, что если вы не выполняете свои заявления неявно, эти программы будут поддерживать незанятые незафиксированные сеансы в течение длительного времени, блокируя ресурсы - особенно когда вы делаете DDL-заявления, такие как create table.

Проверил:

select now()-query_start as query_age, * 
from pg_stat_activity 
where state<>'idle' 
order by 1 desc; 

если вы видите линии с большим временем в query_age колонке и в idle in transaction состоянии, то вам действительно нужно активировать AutoCommit в клиентской программе. На самом деле вам нужно сделать это, даже если вы этого не сделаете ...

Смежные вопросы