J'utilise psycopg2 pour accéder à ma base de données postgres en python. Ma fonction devrait créer une nouvelle base de données, le code ressemble à ceci:Postgres déclenche une "TRANSACTION ACTIVE SQL" (code d'erreur: 25001)
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)
Quand j'appelle createDB mon serveur postgres génère une erreur: CREATE DATABASE ne peut pas fonctionner dans un bloc de transaction avec le code d'erreur 25001 qui signifie " TRANSACTION ACTIVE SQL ".
Je suis assez sûr qu'il n'y a pas d'autre connexion en cours d'exécution en même temps et chaque connexion que j'ai utilisée avant d'appeler createDB est éteint.
Merci de m'avoir mis dans la bonne direction. La solution est décrite ici: http://lists.initd.org/pipermail/psycopg/2002-February/000758.html – Kai
Désolé, c'était la solution si vous utilisez psycopg1, pour psycopg2 au lieu de conn.autocommit() conn.set_isolation_level (psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) et cela devrait fonctionner. – Kai