1- from distutils . version import LooseVersion
1+ from pkg_resources import packaging
22from .connection import Connection , ConnectionInfo
33
44
@@ -124,27 +124,29 @@ def server_version(self, db=None):
124124 db = self ._normalize_db (db )
125125 if db in self ._cache ["server_version" ]["storage" ]:
126126 return self ._cache ["server_version" ]["storage" ][db ]
127+
128+ version_string = self .query ("show server_version" , db )[0 ][0 ]
127129 result = bytes (
128- self . query ( "show server_version" , db )[ 0 ] [0 ], "utf-8" )
130+ version_string . split ( " " ) [0 ], "utf-8" )
129131 self ._cache ["server_version" ]["storage" ][db ] = "{0}" .format (
130132 result .decode ("ascii" ))
131133 return self ._cache ["server_version" ]["storage" ][db ]
132134
133135 def server_version_greater (self , version , db = None ):
134136 db = self ._normalize_db (db )
135- return self .server_version (db ) >= LooseVersion (version )
137+ return packaging . version . parse ( self .server_version (db )) >= packaging . version . parse (version )
136138
137139 def server_version_less (self , version , db = None ):
138140 db = self ._normalize_db (db )
139- return self .server_version (db ) <= LooseVersion (version )
141+ return packaging . version . parse ( self .server_version (db )) <= packaging . version . parse (version )
140142
141143 def bootstrap_version_greater (self , version ):
142- return str (
143- self ._cache ["bootstrap" ]["version" ]) >= LooseVersion (version )
144+ return packaging . version . parse (
145+ str ( self ._cache ["bootstrap" ]["version" ])) >= packaging . version . parse (version )
144146
145147 def bootstrap_version_less (self , version ):
146- return str (
147- self ._cache ["bootstrap" ]["version" ]) <= LooseVersion (version )
148+ return packaging . version . parse (
149+ str ( self ._cache ["bootstrap" ]["version" ])) <= packaging . version . parse (version )
148150
149151 def in_recovery (self , db = None ):
150152 db = self ._normalize_db (db )
@@ -166,16 +168,16 @@ def is_bootstraped(self, db=None):
166168 self ._cache ["bootstrap" ]["counter" ] = 0
167169 # TODO: изменить на нормальное название, 'config' слишком общее
168170 sql = """
169- SELECT count(*)
170- FROM pg_catalog.pg_class
171+ SELECT count(*)
172+ FROM pg_catalog.pg_class
171173 WHERE relname = 'config';
172174 """
173175 result = int (self .query (sql , db )[0 ][0 ])
174176 self ._cache ["bootstrap" ]["storage" ][db ] = (result == 1 )
175177 if self ._cache ["bootstrap" ]["storage" ][db ]:
176178 self ._connections [db ].log .info ("Found mamonsu bootstrap" )
177179 sql = """
178- SELECT max(version)
180+ SELECT max(version)
179181 FROM mamonsu.config;
180182 """
181183 self ._cache ["bootstrap" ]["version" ] = self .query (sql , db )[0 ][0 ]
@@ -227,8 +229,8 @@ def is_pgpro_ee(self, db=None):
227229 def extension_installed (self , ext , db = None ):
228230 db = self ._normalize_db (db )
229231 result = self .query ("""
230- SELECT count(*)
231- FROM pg_catalog.pg_extension
232+ SELECT count(*)
233+ FROM pg_catalog.pg_extension
232234 WHERE lower(extname) = lower('{0}');
233235 """ .format (ext ), db )
234236 return (int (result [0 ][0 ])) == 1
@@ -239,9 +241,9 @@ def extension_schema(self, extension, db=None):
239241 return self ._cache ["extension_schema" ][extension ][db ]
240242 try :
241243 self ._cache ["extension_schema" ][extension ][db ] = self .query ("""
242- SELECT n.nspname
243- FROM pg_extension e
244- JOIN pg_namespace n ON e.extnamespace = n.oid
244+ SELECT n.nspname
245+ FROM pg_extension e
246+ JOIN pg_namespace n ON e.extnamespace = n.oid
245247 WHERE e.extname = '{0}'
246248 """ .format (extension ), db )[0 ][0 ]
247249 return self ._cache ["extension_schema" ][extension ][db ]
@@ -250,7 +252,7 @@ def extension_schema(self, extension, db=None):
250252
251253 def databases (self ):
252254 result , databases = self .query ("""
253- SELECT datname
255+ SELECT datname
254256 FROM pg_catalog.pg_database;
255257 """ ), []
256258 for row in result :
@@ -309,13 +311,13 @@ def get_sys_param(self, param, db=None):
309311 db = self ._normalize_db (db )
310312 if self .is_bootstraped () and self .bootstrap_version_greater ("2.3.4" ):
311313 result = self .query ("""
312- SELECT *
314+ SELECT *
313315 FROM mamonsu.get_sys_param('{0}');
314316 """ .format (param ))[0 ][0 ]
315317 else :
316318 result = self .query ("""
317- SELECT setting
318- FROM pg_catalog.pg_settings
319+ SELECT setting
320+ FROM pg_catalog.pg_settings
319321 WHERE name = '{0}';
320322 """ .format (param ), db )[0 ][0 ]
321323 return result
0 commit comments