summaryrefslogtreecommitdiff
path: root/python/skytools/dbstruct.py
diff options
context:
space:
mode:
authorMarko Kreen2010-10-12 11:46:37 +0000
committerMarko Kreen2010-10-12 11:47:36 +0000
commit283c6e0135ba6f0c06d30725497fe4d81d05aae9 (patch)
treeb08c24794f2129e6023c4bde0b78f10598b532af /python/skytools/dbstruct.py
parent3a9af94546f838a33a1cd74480cc255aa833be1f (diff)
Use different SQL for trigger detection on Postgres 9.0
Diffstat (limited to 'python/skytools/dbstruct.py')
-rw-r--r--python/skytools/dbstruct.py27
1 files changed, 21 insertions, 6 deletions
diff --git a/python/skytools/dbstruct.py b/python/skytools/dbstruct.py
index f0d2d436..b9723eff 100644
--- a/python/skytools/dbstruct.py
+++ b/python/skytools/dbstruct.py
@@ -73,6 +73,11 @@ class TElem(object):
"""Return SQL statement for dropping or None of not supported."""
return None
+ @classmethod
+ def get_load_sql(cls, pgver):
+ """Return SQL statement for finding objects."""
+ return self.SQL
+
class TConstraint(TElem):
"""Info about constraint."""
type = T_CONSTRAINT
@@ -195,11 +200,7 @@ class TRule(TElem):
class TTrigger(TElem):
"""Info about trigger."""
type = T_TRIGGER
- SQL = """
- SELECT tgname as name, pg_get_triggerdef(oid) as def
- FROM pg_trigger
- WHERE tgrelid = %(oid)s AND NOT tgisconstraint
- """
+
def __init__(self, table_name, row):
self.table_name = table_name
self.name = row['name']
@@ -218,6 +219,19 @@ class TTrigger(TElem):
def get_drop_sql(self, curs):
return 'DROP TRIGGER %s ON %s' % (quote_ident(self.name), quote_fqident(self.table_name))
+ @classmethod
+ def get_load_sql(cls, pg_vers):
+ """Return SQL statement for finding objects."""
+
+ sql = "SELECT tgname as name, pg_get_triggerdef(oid) as def "\
+ " FROM pg_trigger "\
+ " WHERE tgrelid = %(oid)s AND "
+ if pg_vers >= 90000:
+ sql += "NOT tgisinternal"
+ else:
+ sql += "NOT tgisconstraint"
+ return sql
+
class TParent(TElem):
"""Info about trigger."""
type = T_PARENT
@@ -424,7 +438,8 @@ class BaseStruct(object):
"""Fetch element(s) from db."""
elem_list = []
#print "Loading %s, name=%s, args=%s" % (repr(eclass), repr(name), repr(args))
- curs.execute(eclass.SQL % args)
+ sql = eclass.get_load_sql(curs.connection.server_version)
+ curs.execute(sql % args)
for row in curs.dictfetchall():
elem_list.append(eclass(name, row))
return elem_list