From 303ed966c5f1293ccced18febfe9ede888d5fa80 Mon Sep 17 00:00:00 2001 From: Randall Smith Date: Wed, 4 Feb 2009 06:05:45 +0000 Subject: [PATCH] additional reflection methods --- lib/sqlalchemy/dialects/postgres/base.py | 47 ++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/lib/sqlalchemy/dialects/postgres/base.py b/lib/sqlalchemy/dialects/postgres/base.py index cb671dfa5f..d3dc9c0e3f 100644 --- a/lib/sqlalchemy/dialects/postgres/base.py +++ b/lib/sqlalchemy/dialects/postgres/base.py @@ -556,6 +556,53 @@ class PGDialect(default.DefaultDialect): info_cache['tables'][table_index]['table_oid'] = table_oid return table_oid + def get_schema_names(self, connection, info_cache=None): + s = """ + SELECT nspname + FROM pg_namespace + ORDER BY nspname + """ + rp = connection.execute(s) + # what about system tables? + return [row[0].decode(self.encoding) for row in rp \ + if not row[0].startswith('pg_')] + + def get_table_names(self, connection, schemaname=None, info_cache=None): + if schemaname is not None: + current_schema = schemaname + else: + current_schema = self.get_default_schema_name(connection) + return self.table_names(connection, current_schema) + + def get_view_names(self, connection, schemaname=None, info_cache=None): + if schemaname is not None: + current_schema = schemaname + else: + current_schema = self.get_default_schema_name(connection) + s = """ + SELECT relname + FROM pg_class c + WHERE relkind = 'v' + AND '%(schema)s' = (select nspname from pg_namespace n where n.oid = c.relnamespace) + """ % dict(schema=current_schema) + return [row[0].decode(self.encoding) for row in connection.execute(s)] + + def get_view_definition(self, connection, viewname, schemaname=None, + info_cache=None): + if schemaname is not None: + current_schema = schemaname + else: + current_schema = self.get_default_schema_name(connection) + s = """ + SELECT definition FROM pg_views + WHERE schemaname = :schemaname + AND viewname = :viewname + """ + rp = connection.execute(sql.text(s), + viewname=viewname, schemaname=current_schema) + if rp: + return rp.scalar().decode(self.encoding) + def get_columns(self, connection, tablename, schemaname=None, info_cache=None): info_cache = self._prepare_info_cache(info_cache, tablename, schemaname) -- 2.47.3