Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Live Overview Databases and Schemata for Postgresql
- *
- * Shows all registered databases and if applicable their schemes
- * @author: planzelle
- *
- */
- // init (hosts to display)
- $hosts = array('f1-db1.sys.de', 'f1-db2.sys.de');
- // NO CHANGES BEYOND THIS POINT ! (user: postgres, no password)
- // get handle for postgres internal system db
- function getPgHandle($host) {
- $dsn = sprintf("pgsql: host=%s dbname=postgres", $host);
- $dbh = new PDO($dsn, 'postgres', '') or die('No connection to host: '.$host);
- return $dbh;
- }
- // get handle for db
- function getDbHandle($host, $dbname) {
- $dsn = sprintf("pgsql: host=%s dbname=%s", $host, $dbname);
- $dbh = new PDO($dsn, 'postgres', '') or die('No connection to host: '.$host);
- return $dbh;
- }
- // filter only non-system dbs and those who are not test/demo or templ
- function filterDatname($name) {
- $ret = strpos($name, 'etacs_')===0? true : false;
- if (preg_match('/(test|demo|_templ)/',$name)) {
- $ret = false;
- }
- return $ret;
- }
- // filte allowed schema
- function filterSchema($name) {
- $ret = true;
- if (preg_match('/(public|information_schema|pg_)/', $name)) {
- $ret = false;
- }
- return $ret;
- }
- function printHeader() {
- echo <<<EOH
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <title>Etacs DB Explorer</title>
- <style>
- .grey { color: grey;}
- .blue { color: blue;}
- .red { color: red;}
- body { font-family: courier;}
- td { padding: 5px;}
- </style>
- </head>
- <body>
- EOH;
- }
- function printContent($arr) {
- $cnt = 0;
- printf('<table><tbody><tr valign="top">%s',"\n");
- foreach($arr as $server) {
- $host = $server['name'];
- printf('<td><table border="1"><tr><th><h4 class="blue">%s</h4></th></tr>%s', $host, "\n");
- foreach ($server['databases'] as $databases) {
- $database = $databases['name'];
- if (empty($arr[$host]['databases'][$database]['schema'])) {
- // no schemas, so print and count the database
- printf("<tr><td>%s. %s</td></tr>\n", ++$cnt, $database);
- } else {
- // schema dbs, so print, but don't count databases and list schemata
- printf('<tr><td><em><strong class="grey">Schema-DB:</strong> <span class="red">%s</span></em><br />%s', $database, "\n");
- foreach($arr[$host]['databases'][$database]['schema'] as $schema) {
- printf("%s. %s<br />\n", ++$cnt, $schema);
- }
- print("</td></tr>\n");
- }
- }
- echo "</table></td>";
- }
- echo "</tr></tbody></table>\n";
- }
- function printFooter() {
- echo <<<EOF
- </body>
- </html>
- EOF;
- }
- $arr = array();
- printHeader();
- // main loop
- foreach($hosts as $host) {
- $arr[$host] = array('name'=>$host, 'databases'=>array());
- $db1 = getPgHandle($host);
- $sql1 = "SELECT datname FROM pg_database ORDER BY datname;";
- $stmt1 = $db1->query($sql1);
- if ($stmt1) {
- while($row = $stmt1->fetch(PDO::FETCH_ASSOC)) {
- $dbname = $row['datname'];
- if (filterDatname($dbname)) {
- $arr[$host]['databases'][$dbname] = array('name'=>$dbname, 'schema'=>array());
- $db2 = getDbHandle($host, $dbname);
- $sql2 = sprintf("SELECT schema_name FROM information_schema.schemata WHERE catalog_name='%s' ORDER BY schema_name;", $dbname);
- $stmt2 = $db2->query($sql2);
- if ($stmt2) {
- while($row2 = $stmt2->fetch(PDO::FETCH_ASSOC)) {
- $schema = $row2['schema_name'];
- //echo $schema;
- if (filterSchema($schema)) {
- $arr[$host]['databases'][$dbname]['schema'][] = $schema;
- }
- }
- }
- }
- }
- }
- }
- printContent($arr);
- printFooter();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement