#127 working with schemas

Postgres (36)

We use heavily schemas within a database (using
PostgreSQL), and SQLObject has trouble identifying the
primary with a table that lives in a schema, or a table
in the default schema that has the same name than a
table in other schema.

In pgconnection.py I patched the following code and
everything worked afterwards, but now I have to specify
the schema name even for the tables in the default one:

primaryKeyQuery = """
SELECT pg_index.indisprimary,
FROM pg_catalog.pg_class c, pg_catalog.pg_class c2,
pg_catalog.pg_index AS pg_index
WHERE c.relname = %s
AND c.oid = pg_index.indrelid
AND pg_index.indexrelid = c2.oid
AND pg_index.indisprimary
AND pg_namespace.oid=c.relnamespace
AND %s=pg_namespace.nspname

keyData = self.queryAll(keyQuery %
keyRE = re.compile(r"\((.+)\) REFERENCES (.+)\(")
keymap = {}

for (condef,) in keyData:
match = keyRE.search(condef)
if match:
field, reftable = match.groups()
keymap[field] = reftable.capitalize()
sqlrepr = self.sqlrepr(tableName)
table = "'"+sqlrepr[sqlrepr.find('.')+1:]
schema = sqlrepr[0:sqlrepr.find('.')]+"'"
primaryData = self.queryAll(primaryKeyQuery %
(table, schema))

The code above parses the schema and the table name
from a sqlrepr as "public.user" and uses the schema for
a new where clause in the select query
("%s=pg_namespace.nspname") joining with the internal
table that maps oids with schema names

I don't have a lot of experience with Python yet,
otherwise I would have sumbitted a patch.


Log in to post a comment.