diff --git a/pyrseas/database.py b/pyrseas/database.py index 23e08734..b44f6308 100644 --- a/pyrseas/database.py +++ b/pyrseas/database.py @@ -388,7 +388,7 @@ def from_map(self, input_map, langs=None): input_evttrigs.update({key: input_map[key]}) else: raise KeyError("Expected typed object, found '%s'" % key) - self.ndb.extensions.from_map(input_extens, langs, self.ndb) + self.ndb.extensions.from_map(input_extens, self.ndb) self.ndb.languages.from_map(input_langs) self.ndb.schemas.from_map(input_schemas, self.ndb) self.ndb.casts.from_map(input_casts, self.ndb) @@ -521,9 +521,7 @@ def diff_map(self, input_map, quote_reserved=True): if quote_reserved: fetch_reserved_words(self.dbconn) - langs = [lang[0] for lang in self.dbconn.fetchall( - "SELECT name FROM pg_available_extensions() INNER JOIN pg_language ON name = lanname;")] - self.from_map(input_map, langs) + self.from_map(input_map) if opts.revert: (self.db, self.ndb) = (self.ndb, self.db) del self.ndb.schemas['pg_catalog'] diff --git a/pyrseas/dbobject/extension.py b/pyrseas/dbobject/extension.py index 497637ef..839bd9bd 100644 --- a/pyrseas/dbobject/extension.py +++ b/pyrseas/dbobject/extension.py @@ -98,6 +98,15 @@ def alter(self, inobj, no_owner=True): """ return super(Extension, self).alter(inobj, no_owner=no_owner) +KNOWN_LANGS = [ + "plpgsql", + "pltcl", + "pltclu", + "plperl", + "plperlu", + "plpythonu", + "plpython2u", + "plpython3u"] class ExtensionDict(DbObjectDict): "The collection of extensions in a database" @@ -110,11 +119,10 @@ def _from_catalog(self): self[obj.key()] = obj self.by_oid[obj.oid] = obj - def from_map(self, inexts, langtempls, newdb): + def from_map(self, inexts, newdb): """Initalize the dictionary of extensions by converting the input map :param inexts: YAML map defining the extensions - :param langtempls: list of language templates :param newdb: dictionary of input database """ for key in inexts: @@ -123,7 +131,7 @@ def from_map(self, inexts, langtempls, newdb): name = key[10:] inobj = inexts[key] self[name] = Extension.from_map(name, inobj) - if self[name].name in langtempls: + if self[name].name in KNOWN_LANGS: lang = {'language %s' % self[name].name: { '_ext': 'e', 'owner': self[name].owner}} newdb.languages.from_map(lang) diff --git a/tests/dbobject/test_extension.py b/tests/dbobject/test_extension.py index 405426d6..6b833507 100644 --- a/tests/dbobject/test_extension.py +++ b/tests/dbobject/test_extension.py @@ -22,7 +22,9 @@ def base_version(self): return '1.1' elif self.db.version < 110000: return '1.3' - return '1.4' + elif self.db.version < 130000: + return '1.4' + return '1.5' def test_map_extension(self): "Map an existing extension" diff --git a/tests/dbobject/test_extern_file.py b/tests/dbobject/test_extern_file.py index ffc7a1d9..bf575317 100644 --- a/tests/dbobject/test_extern_file.py +++ b/tests/dbobject/test_extern_file.py @@ -49,13 +49,15 @@ def test_map_casts(self): def test_map_extension(self): "Map extensions" - TRGM_VERS = '1.4' + TRGM_VERS = '1.5' if self.db.version < 90300: TRGM_VERS = '1.0' elif self.db.version < 90600: TRGM_VERS = '1.1' elif self.db.version < 110000: TRGM_VERS = '1.3' + elif self.db.version < 130000: + TRGM_VERS = '1.4' self.to_map(["CREATE EXTENSION pg_trgm"], superuser=True, multiple_files=True) expmap = {'extension plpgsql': { diff --git a/tests/dbobject/test_language.py b/tests/dbobject/test_language.py index 9e7763a2..d64885ea 100644 --- a/tests/dbobject/test_language.py +++ b/tests/dbobject/test_language.py @@ -33,6 +33,8 @@ def test_map_language_comment(self): def test_map_language_bug_103(self): "Test a function created with language other than plpgsql/plperl" + if self.db.version >= 130000: + self.skipTest('Only available before PG 13') try: self.to_map(["CREATE OR REPLACE LANGUAGE plpython3u"]) except psycopg2.OperationalError as e: