diff options
author | Magnus Hagander | 2012-11-27 17:22:32 +0000 |
---|---|---|
committer | Magnus Hagander | 2012-11-27 17:22:32 +0000 |
commit | fb11598dada50b48a03385940e5b477e7c512b03 (patch) | |
tree | 4b84c5c41aa8ecd49f0d493b50601bfdbb7fea27 | |
parent | 00ba6912c15e04221e15574072449051af645685 (diff) |
Fix queries reading pg_shdescription
These queries need to be classoid qualified, so they work when there
are multiple objects with the same oid but of different classes.
(Which can always happen, but is a lot more likely to happen after
a cluster has been pg_upgrade'd)
-rwxr-xr-x | classes/database/Postgres.php | 8 | ||||
-rw-r--r-- | classes/database/Postgres83.php | 2 | ||||
-rwxr-xr-x | classes/database/Postgres91.php | 4 |
3 files changed, 7 insertions, 7 deletions
diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php index 0d8a6887..b9737733 100755 --- a/classes/database/Postgres.php +++ b/classes/database/Postgres.php @@ -466,7 +466,7 @@ class Postgres extends ADODB_base { $sql = " SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid) AS datcomment, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid AND pd.classoid='pg_database'::regclass) AS datcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, CASE WHEN pg_catalog.has_database_privilege(current_user, pdb.oid, 'CONNECT') THEN pg_catalog.pg_database_size(pdb.oid) @@ -489,7 +489,7 @@ class Postgres extends ADODB_base { */ function getDatabaseComment($database) { $this->clean($database); - $sql = "SELECT description FROM pg_catalog.pg_database JOIN pg_catalog.pg_shdescription ON (oid=objoid) WHERE pg_database.datname = '{$database}' "; + $sql = "SELECT description FROM pg_catalog.pg_database JOIN pg_catalog.pg_shdescription ON (oid=objoid AND classoid='pg_database'::regclass) WHERE pg_database.datname = '{$database}' "; return $this->selectSet($sql); } @@ -6939,7 +6939,7 @@ class Postgres extends ADODB_base { global $conf; $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid) AS spccomment + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment FROM pg_catalog.pg_tablespace"; if (!$conf['show_system'] && !$all) { @@ -6959,7 +6959,7 @@ class Postgres extends ADODB_base { $this->clean($spcname); $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid) AS spccomment + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; return $this->selectSet($sql); diff --git a/classes/database/Postgres83.php b/classes/database/Postgres83.php index cc80e65e..3ac4f789 100644 --- a/classes/database/Postgres83.php +++ b/classes/database/Postgres83.php @@ -90,7 +90,7 @@ class Postgres83 extends Postgres84 { $sql = " SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid) AS datcomment, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid AND pd.classoid='pg_database'::regclass) AS datcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, pg_catalog.pg_database_size(pdb.oid) as dbsize FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid) diff --git a/classes/database/Postgres91.php b/classes/database/Postgres91.php index 07dda493..f238925a 100755 --- a/classes/database/Postgres91.php +++ b/classes/database/Postgres91.php @@ -62,7 +62,7 @@ class Postgres91 extends Postgres { global $conf; $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid) AS spccomment + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment FROM pg_catalog.pg_tablespace"; if (!$conf['show_system'] && !$all) { @@ -82,7 +82,7 @@ class Postgres91 extends Postgres { $this->clean($spcname); $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid) AS spccomment + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; return $this->selectSet($sql); |