|
|
@ -8,7 +8,8 @@ class Db(object): |
|
|
|
|
|
|
|
def __init__(self,name): |
|
|
|
self._name = name |
|
|
|
self.conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost' password=''"); |
|
|
|
self.conn = psycopg2.connect("dbname='postgres' user='postgres' host= \ |
|
|
|
'localhost' password=''"); |
|
|
|
self.conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) |
|
|
|
self.cursor = self.conn.cursor() |
|
|
|
|
|
|
@ -31,7 +32,8 @@ class Db(object): |
|
|
|
return out |
|
|
|
|
|
|
|
def _get_owner(self): |
|
|
|
sql = "SELECT pg_get_userbyid(datdba) FROM pg_database WHERE datname ='"+self.sanitize(self._name)+"';" |
|
|
|
sql = "SELECT pg_get_userbyid(datdba) FROM pg_database WHERE datname = \ |
|
|
|
'"+self.sanitize(self._name)+"';" |
|
|
|
own = self._runsql(sql) |
|
|
|
return own |
|
|
|
|
|
|
@ -44,16 +46,20 @@ class Db(object): |
|
|
|
|
|
|
|
@property |
|
|
|
def db_OID(self): |
|
|
|
sql = "SELECT oid FROM pg_database WHERE datname = '"+self.sanitize(self._name)+"';" |
|
|
|
sql = "SELECT oid FROM pg_database WHERE datname = '" \ |
|
|
|
+self.sanitize(self._name)+"';" |
|
|
|
oid = self._runsql(sql) |
|
|
|
return oid |
|
|
|
|
|
|
|
@property |
|
|
|
def db_info(self): |
|
|
|
information = {'size':'', 'encoding':'', 'collation':'','ctype':''} |
|
|
|
information['size'] = self._runsql("SELECT pg_size_pretty(pg_database_size('"+self.sanitize(self._name)+"'));") |
|
|
|
information['size'] = self._runsql("SELECT pg_size_pretty( \ |
|
|
|
pg_database_size('"+self.sanitize( |
|
|
|
self._name)+"'));") |
|
|
|
inf = self._runsql("""SELECT pg_encoding_to_char(encoding), |
|
|
|
datcollate, datctype FROM pg_database WHERE datname='"""+self._name+"';") |
|
|
|
datcollate, datctype FROM pg_database WHERE datname='""" |
|
|
|
+self._name+"';") |
|
|
|
information['encoding'] = inf[0][0] |
|
|
|
information['collation'] = inf[0][1] |
|
|
|
information['ctype'] = inf[0][2] |
|
|
@ -61,19 +67,22 @@ class Db(object): |
|
|
|
|
|
|
|
@property |
|
|
|
def db_connections(self): |
|
|
|
sql = "SELECT numbackends from pg_stat_database WHERE datname = '"+self.sanitize(self._name)+"';" |
|
|
|
sql = "SELECT numbackends from pg_stat_database WHERE datname = \ |
|
|
|
'"+self.sanitize(self._name)+"';" |
|
|
|
cncs = self._runsql(sql) |
|
|
|
return cncs |
|
|
|
|
|
|
|
def user_exists(self, user): |
|
|
|
sql = "SELECT rolname FROM pg_authid WHERE rolname = '"+self.sanitize(user)+"';" |
|
|
|
sql = "SELECT rolname FROM pg_authid WHERE rolname = \ |
|
|
|
'"+self.sanitize(user)+"';" |
|
|
|
u = self._runsql(sql) |
|
|
|
if (len(u) == 0): |
|
|
|
return False |
|
|
|
return True |
|
|
|
|
|
|
|
def db_exists(self, xdb): |
|
|
|
sql = "SELECT datname FROM pg_database WHERE datname = '"+self.sanitize(xdb)+"';" |
|
|
|
sql = "SELECT datname FROM pg_database WHERE datname = \ |
|
|
|
'"+self.sanitize(xdb)+"';" |
|
|
|
d = self._runsql(sql) |
|
|
|
if (len(d) == 0): |
|
|
|
return False |
|
|
@ -88,13 +97,17 @@ class Db(object): |
|
|
|
|
|
|
|
def db_create(self, own, coll, ctyp, enc=u'UTF8'): |
|
|
|
if self.db_exists(self._name) == False: |
|
|
|
sql = "CREATE DATABASE "+self.sanitize(self._name)+" WITH OWNER = "+self.sanitize(own)+" ENCODING = '"+self.sanitize(enc)+"' LC_COLLATE = '"+self.sanitize(coll)+"' LC_CTYPE = '"+self.sanitize(ctyp)+"';" |
|
|
|
sql = "CREATE DATABASE "+self.sanitize(self._name)+" WITH OWNER = "\ |
|
|
|
+self.sanitize(own)+" ENCODING = '"+self.sanitize(enc) \ |
|
|
|
+"' LC_COLLATE = '"+self.sanitize(coll)+"' LC_CTYPE = \ |
|
|
|
'"+self.sanitize(ctyp)+"';" |
|
|
|
create = self._runsql(sql) |
|
|
|
return create |
|
|
|
return "Failed" |
|
|
|
|
|
|
|
def db_dump(self, path, method): |
|
|
|
dump = Popen(['/usr/bin/pg_dump', '-U','postgres','-F'+ method, self._name], stdout=PIPE) |
|
|
|
dump = Popen(['/usr/bin/pg_dump', '-U','postgres','-F'+ |
|
|
|
method, self._name], stdout=PIPE) |
|
|
|
fl = open(path,"wb") |
|
|
|
gz = Popen(['gzip'], stdin = dump.stdout, stdout = fl) |
|
|
|
fl.close |
|
|
@ -104,7 +117,8 @@ class Db(object): |
|
|
|
def db_rename(self,old, new): |
|
|
|
if self.db_exists(new) == True or self.db_exists(old) == False: |
|
|
|
return "Cannot" |
|
|
|
sql = "ALTER DATABASE "+self.sanitize(old)+" RENAME TO "+self.sanitize(new)+";" |
|
|
|
sql = "ALTER DATABASE "+self.sanitize(old)+" RENAME TO " \ |
|
|
|
+self.sanitize(new)+";" |
|
|
|
rename = self._runsql(sql) |
|
|
|
return rename |
|
|
|
|
|
|
@ -112,7 +126,8 @@ class Db(object): |
|
|
|
pass |
|
|
|
|
|
|
|
def db_list(self): |
|
|
|
sql = "SELECT datname FROM pg_database WHERE datname NOT IN ('template0', 'template1', 'postgres');" |
|
|
|
sql = "SELECT datname FROM pg_database WHERE datname NOT IN ('template0' \ |
|
|
|
, 'template1', 'postgres');" |
|
|
|
dbl = self._runsql(sql) |
|
|
|
return dbl |
|
|
|
|
|
|
@ -122,7 +137,9 @@ class Db(object): |
|
|
|
return usrl |
|
|
|
|
|
|
|
def usr_add(self, us, passw): |
|
|
|
sql = "CREATE ROLE "+self.sanitize(us)+" WITH NOSUPERUSER NOCREATEDB NOCREATEROLE NOCREATEUSER LOGIN PASSWORD '"+self.sanitize(passw)+"';" |
|
|
|
sql = "CREATE ROLE "+self.sanitize(us)+" WITH NOSUPERUSER NOCREATEDB \ |
|
|
|
NOCREATEROLE NOCREATEUSER LOGIN PASSWORD '" \ |
|
|
|
+self.sanitize(passw)+"';" |
|
|
|
usra = self._runsql(sql) |
|
|
|
return usra |
|
|
|
|
|
|
|