Basic support for viewing tables in Greenplum. Patch from George & Tira @ Pivotal.

This commit is contained in:
Atira Odhner
2017-02-13 10:02:20 +00:00
committed by Dave Page
parent 2f6a0e01da
commit ec9e8b79a3
4 changed files with 125 additions and 2 deletions

View File

@@ -134,6 +134,25 @@ def create_database(server, db_name):
traceback.print_exc(file=sys.stderr)
def create_table(server, db_name, table_name):
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'])
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
pg_cursor.execute('''CREATE TABLE "%s" (name VARCHAR, value NUMERIC)''' % table_name)
pg_cursor.execute('''INSERT INTO "%s" VALUES ('Some-Name', 6)''' % table_name)
connection.set_isolation_level(old_isolation_level)
connection.commit()
except Exception:
traceback.print_exc(file=sys.stderr)
def drop_database(connection, database_name):
"""This function used to drop the database"""
if database_name not in ["postgres", "template1", "template0"]:
@@ -389,3 +408,40 @@ def _drop_objects(tester):
def get_cleanup_handler(tester):
"""This function use to bind variable to drop_objects function"""
return partial(_drop_objects, tester)
class Database:
"""
Temporarily create and connect to a database, tear it down at exit
example:
with Database(server, 'some_test_db') as (connection, database_name):
connection.cursor().execute(...)
"""
def __init__(self, server):
self.name = None
self.server = server
self.maintenance_connection = None
self.connection = None
def __enter__(self):
self.name = "test_db_{}".format(str(uuid.uuid4())[0:7])
self.maintenance_connection = get_db_connection(self.server['db'],
self.server['username'],
self.server['db_password'],
self.server['host'],
self.server['port'])
create_database(self.server, self.name)
self.connection = get_db_connection(self.name,
self.server['username'],
self.server['db_password'],
self.server['host'],
self.server['port'])
return self.connection, self.name
def __exit__(self, type, value, traceback):
self.connection.close()
drop_database(self.maintenance_connection, self.name)