@@ -32,7 +32,7 @@ class Pool(object):
32
32
"select sum(1) * (current_setting('block_size')::int8) as size, "
33
33
" sum(case when usagecount > 1 then 1 else 0 end) * (current_setting('block_size')::int8) as twice_used, "
34
34
" sum(case isdirty when true then 1 else 0 end) * (current_setting('block_size')::int8) as dirty "
35
- " from mamonsu .pg_buffercache" ,
35
+ " from {0} .pg_buffercache" ,
36
36
'select size, twice_used, dirty from mamonsu.buffer_cache()'
37
37
),
38
38
'wal_lag_lsn' : (
@@ -56,6 +56,7 @@ def __init__(self, params=None):
56
56
'server_version' : {'storage' : {}},
57
57
'bootstrap' : {'storage' : {}, 'counter' : 0 , 'cache' : 10 , 'version' : False },
58
58
'recovery' : {'storage' : {}, 'counter' : 0 , 'cache' : 10 },
59
+ 'extension_schema' : {'pg_buffercache' : {}},
59
60
'pgpro' : {'storage' : {}},
60
61
'pgproee' : {'storage' : {}}
61
62
}
@@ -167,6 +168,16 @@ def extension_installed(self, ext, db=None):
167
168
'where extname = \' {0}\' ' .format (ext ), db )
168
169
return (int (result [0 ][0 ])) == 1
169
170
171
+ def extension_schema (self , extension , db = None ):
172
+ db = self ._normalize_db (db )
173
+ if db in self ._cache ['extension_schema' ][extension ]:
174
+ return self ._cache ['extension_schema' ][extension ][db ]
175
+ self ._cache ['extension_schema' ][extension ][db ] = self .query (
176
+ "select n.nspname from pg_extension e "
177
+ "join pg_namespace n "
178
+ "on e.extnamespace = n.oid where e.extname = '{0}'" .format (extension ), db )[0 ][0 ]
179
+ return self ._cache ['extension_schema' ][extension ][db ]
180
+
170
181
def databases (self ):
171
182
result , databases = self .query (
172
183
'select datname from '
@@ -176,24 +187,25 @@ def databases(self):
176
187
databases .append (row [0 ])
177
188
return databases
178
189
179
- def fill_query_params (self , query , params ):
180
- if params :
181
- return query .format (* params )
182
- else :
183
- return query
190
+ def fill_query_params (self , query , params , extension = None , db = None ):
191
+ if not params :
192
+ params = []
193
+ if extension :
194
+ params .append (self .extension_schema (extension , db ))
195
+ return query .format (* params )
184
196
185
- def get_sql (self , typ , args = None , db = None ):
197
+ def get_sql (self , typ , args = None , extension = None , db = None ):
186
198
db = self ._normalize_db (db )
187
199
if typ not in self .SQL :
188
200
raise LookupError ("Unknown SQL type: '{0}'" .format (typ ))
189
201
result = self .SQL [typ ]
190
202
if self .is_bootstraped (db ):
191
- return self .fill_query_params (result [1 ], args )
203
+ return self .fill_query_params (result [1 ], args , extension , db )
192
204
else :
193
- return self .fill_query_params (result [0 ], args )
205
+ return self .fill_query_params (result [0 ], args , extension , db )
194
206
195
- def run_sql_type (self , typ , args = None , db = None ):
196
- return self .query (self .get_sql (typ , args , db ), db )
207
+ def run_sql_type (self , typ , args = None , extension = None , db = None ):
208
+ return self .query (self .get_sql (typ , args , extension , db ), db )
197
209
198
210
def _normalize_db (self , db = None ):
199
211
if db is None :
0 commit comments