summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrina Truong <i.chernyavska@gmail.com>2017-03-13 11:02:16 -0700
committerIrina Truong <i.chernyavska@gmail.com>2017-03-13 11:02:16 -0700
commitdcd9cbac4f3492b674b414c9bc1ddc54cbf61c98 (patch)
tree48988228ffb51432ea0710c1abbf3cbf92f412e0
parent91a3a9da6da1a8ca2ad27ac6e53062fa0aa802a9 (diff)
Fix set_session cannot be used inside a transaction when using dsn. Connect #664.
-rw-r--r--pgcli/pgexecute.py16
1 files changed, 10 insertions, 6 deletions
diff --git a/pgcli/pgexecute.py b/pgcli/pgexecute.py
index 650e7f5e..451a0a89 100644
--- a/pgcli/pgexecute.py
+++ b/pgcli/pgexecute.py
@@ -169,12 +169,6 @@ class PGExecute(object):
dsn = "{0} password={1}".format(dsn, password)
conn = psycopg2.connect(dsn=unicode2utf8(dsn))
cursor = conn.cursor()
- # When we connect using a DSN, we don't really know what db,
- # user, etc. we connected to. Let's read it.
- db = self._select_one(cursor, 'select current_database()')[0]
- user = self._select_one(cursor, 'select current_user')[0]
- host = self._select_one(cursor, 'select inet_server_addr()')[0]
- port = self._select_one(cursor, 'select inet_server_port()')[0]
else:
conn = psycopg2.connect(
database=unicode2utf8(db),
@@ -190,6 +184,16 @@ class PGExecute(object):
self.conn.close()
self.conn = conn
self.conn.autocommit = True
+
+ if dsn:
+ # When we connect using a DSN, we don't really know what db,
+ # user, etc. we connected to. Let's read it.
+ # Note: moved this after setting autocommit because of #664.
+ db = self._select_one(cursor, 'select current_database()')[0]
+ user = self._select_one(cursor, 'select current_user')[0]
+ host = self._select_one(cursor, 'select inet_server_addr()')[0]
+ port = self._select_one(cursor, 'select inet_server_port()')[0]
+
self.dbname = db
self.user = user
self.password = password