From 4e5fec95e320b62fd7c282167bb45b0b83c3c6a2 Mon Sep 17 00:00:00 2001 From: Dimitri Fontaine Date: Thu, 29 Apr 2010 17:14:44 +0200 Subject: [PATCH] Fix connection management bug when columns = *. Instead of opening a connection per section and leaving it open until the end for the run, open a connection just for getting this section columns then close it. Per gripes from a user dealing with 90000 sections. --- pgloader/db.py | 10 +++++++++- pgloader/pgloader.py | 3 +-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pgloader/db.py b/pgloader/db.py index e58c66f..7fb737e 100644 --- a/pgloader/db.py +++ b/pgloader/db.py @@ -148,7 +148,12 @@ ORDER BY attnum """ self.log.debug("get_all_columns: %s %s %s" % (tablename, schemaname, sql)) - columns = [] + columns = [] + + have_to_connect = self.dbconn is None + if have_to_connect: + self.reset() + cursor = self.dbconn.cursor() try: cursor.execute(sql, [tablename, schemaname]) @@ -161,6 +166,9 @@ ORDER BY attnum cursor.close() + if have_to_connect: + self.close() + return columns def reset(self): diff --git a/pgloader/pgloader.py b/pgloader/pgloader.py index 5bb2421..5b1becd 100644 --- a/pgloader/pgloader.py +++ b/pgloader/pgloader.py @@ -314,8 +314,7 @@ class PGLoader(threading.Thread): self.all_cols = True self.db.all_cols = True - # force db to connect now - self.db.reset() + # get column list from database self.columns = self.db.get_all_columns(self.table) self.log.info("columns = *, got %s", str(self.columns))