Я использую psycopg2 для доступа к моей базе данных postgres в python. Моя функция должна создать новую базу данных, код выглядит так:
def createDB(host, username, dbname):
adminuser = settings.DB_ADMIN_USER
adminpass = settings.DB_ADMIN_PASS
try:
conn=psycopg2.connect(user=adminuser, password=adminpass, host=host)
cur = conn.cursor()
cur.execute("CREATE DATABASE %s OWNER %s" % (nospecial(dbname), nospecial(username)))
conn.commit()
except Exception, e:
raise e
finally:
cur.close()
conn.close()
def nospecial(s):
pattern = re.compile('[^a-zA-Z0-9_]+')
return pattern.sub('', s)
Когда я вызываю createDB, мой сервер postgres выдает ошибку:
CREATE DATABASE не может работать внутри блока транзакции
с кодом ошибки 25001, который обозначает «АКТИВНАЯ СДЕЛКА SQL».
Я почти уверен, что в это же время не выполняется ни одно другое соединение, и все соединения, которые я использовал перед вызовом createDB, закрываются.