merge PG fixes from master

Change-Id: I5630eb8ba503c567bebddd10f6e525ceb3dd5998
This commit is contained in:
Mike Bayer
2017-08-21 20:15:21 -04:00
parent 320ba61529
commit 9ceddec38f
+22 -2
View File
@@ -166,17 +166,37 @@ def _pg_create_db(cfg, eng, ident):
except Exception:
pass
currentdb = conn.scalar("select current_database()")
for attempt in range(3):
for attempt in range(10):
try:
log.info(
"emitting CREATE DATABASE %s url %r" %
(ident, eng.url))
conn.execute(
"CREATE DATABASE %s TEMPLATE %s" % (ident, currentdb))
except exc.OperationalError as err:
if attempt != 2 and "accessed by other users" in str(err):
conn.connection.rollback()
if attempt != 10 and "accessed by other users" in str(err):
log.info(
"got accessed by others for database %s, URI %r, "
"sleeping for .2",
ident, eng.url)
time.sleep(.2)
continue
else:
raise
else:
time.sleep(.5)
log.info(
"checking for database %s URI %r" %
(ident, eng.url))
result = conn.execute(
"SELECT datname FROM pg_database "
"where datname='%s'" % ident)
row = result.first()
if not row:
raise Exception(
"Database named %s did not get "
"created, in engine %r" % (ident, eng.url))
break