Пожалуйста, попробуйте это.
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
version = pInfo.versionName;
После дополнительных поисков я обнаружил свойство isolated_level объекта подключения psycopg2. Оказывается, изменение этого параметра на 0
выведет вас из блока транзакции. Ее решает изменение вакуумного метода вышеуказанного класса на следующий. Обратите внимание, что я также установил уровень изоляции обратно на тот, который был ранее на всякий случай (кажется, 1
по умолчанию).
def vacuum(self):
old_isolation_level = self.conn.isolation_level
self.conn.set_isolation_level(0)
query = "VACUUM FULL"
self._doQuery(query)
self.conn.set_isolation_level(old_isolation_level)
Эта статья (в конце на этой странице) предоставляет краткое объяснение уровней изоляции в этом контексте.
Не делайте этого - вам не нужен ПОЛНЫЙ ВАКУУМ. На самом деле, если вы используете несколько свежую версию Postgres (скажем,> 8.1), вам даже не нужно запускать простой VACUUM вручную.
Я не знаю psycopg2 и PostgreSQL, но знаю только apsw и SQLite, поэтому думаю, что не могу помочь с "psycopg2".
Но мне кажется, что PostgreSQL может работает аналогично SQLite, он имеет два режима работы:
В этом случае проблема может быть внутри уровня доступа psycopg2. Когда он обычно работает таким образом, что транзакции неявно вставляются до тех пор, пока не будет сделана фиксация, не может быть «стандартного способа» создания вакуума.
Конечно, возможно, что у «psycopg2» есть свой особый ». вакуум » метод или специальный режим работы, в котором не запускаются неявные транзакции.
Когда таких возможностей нет, остается один единственный вариант (без изменения уровня доступа ;-)):
Большинство баз данных имеют программу оболочки для получить доступ к базе данных. Программа могла запускать эту программу оболочки с конвейером (вводя команду вакуума в оболочку), таким образом используя программу оболочки для создания вакуума. Поскольку вакуум - это медленная операция как таковая, запуском внешней программы можно пренебречь. Конечно, реальная программа должна зафиксировать всю незавершенную работу раньше, иначе может возникнуть ситуация тупиковой блокировки - вакуум должен дождаться окончания вашей последней транзакции.
остается один единственный вариант (без изменения уровня доступа ;-)):В большинстве баз данных есть программа оболочки для доступа к базе данных. Программа могла запускать эту программу оболочки с конвейером (вводя команду вакуума в оболочку), таким образом используя программу оболочки для создания вакуума. Поскольку вакуум - это медленная операция как таковая, запуском внешней программы можно пренебречь. Конечно, реальная программа должна зафиксировать всю незавершенную работу раньше, иначе может возникнуть ситуация тупиковой блокировки - вакуум должен дождаться окончания вашей последней транзакции.
остается один единственный вариант (без изменения уровня доступа ;-)):В большинстве баз данных есть программа оболочки для доступа к базе данных. Программа могла запускать эту программу оболочки с конвейером (вводя команду вакуума в оболочку), таким образом используя программу оболочки для создания вакуума. Поскольку вакуум - это медленная операция как таковая, запуском внешней программы можно пренебречь. Конечно, реальная программа должна зафиксировать всю незавершенную работу раньше, иначе может возникнуть ситуация тупиковой блокировки - вакуум должен дождаться окончания вашей последней транзакции.
запуском внешней программы можно пренебречь. Конечно, реальная программа должна зафиксировать всю незавершенную работу раньше, иначе может возникнуть ситуация тупиковой блокировки - вакуум должен дождаться окончания вашей последней транзакции. запуском внешней программы можно пренебречь. Конечно, реальная программа должна зафиксировать всю незавершенную работу раньше, иначе может возникнуть ситуация тупиковой блокировки - вакуум должен дождаться окончания вашей последней транзакции.