Pythonでpostgresデータベースにアクセスするためにpsycopg2を使用しています。私の関数は新しいデータベースを作成する必要があります。コードは次のようになります。
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 サーバーがエラーをスローします。「ACTIVE SQL TRANSACTION」を表すエラーコード 25001 のトランザクション ブロック内で CREATE DATABASE を実行できません。
同時に実行されている他の接続がなく、createDB を呼び出す前に使用したすべての接続がシャットダウンされていることは確かです。