Permalink
Browse files

Merge branch 'MDL-34145_21' of git://github.com/timhunt/moodle into M…

…OODLE_21_STABLE
  • Loading branch information...
2 parents 48d0a91 + 3aa0f88 commit 97f5b526e6d5e486d7fdc618799f74b5a92c2fe1 @stronk7 stronk7 committed Jul 5, 2012
Showing with 15 additions and 6 deletions.
  1. +15 −6 lib/dml/pgsql_native_moodle_database.php
View
21 lib/dml/pgsql_native_moodle_database.php
@@ -278,12 +278,21 @@ public function get_tables($usecache=true) {
}
$this->tables = array();
$prefix = str_replace('_', '|_', $this->prefix);
- // Get them from information_schema instead of catalog as far as
- // we want to get only own session temp objects (catalog returns all)
- $sql = "SELECT table_name
- FROM information_schema.tables
- WHERE table_name LIKE '$prefix%' ESCAPE '|'
- AND table_type IN ('BASE TABLE', 'LOCAL TEMPORARY')";
+ if ($this->is_min_version('9.1')) {
+ // Use ANSI standard information_schema in recent versions where it is fast enough.
+ $sql = "SELECT table_name
+ FROM information_schema.tables
+ WHERE table_name LIKE '$prefix%' ESCAPE '|'
+ AND table_type IN ('BASE TABLE', 'LOCAL TEMPORARY')";
+ } else {
+ // information_schema is horribly slow in <= 9.0, so use pg internals.
+ // Note the pg_is_other_temp_schema. We only want temp objects from our own session.
+ $sql = "SELECT c.relname
+ FROM pg_class c
+ WHERE c.relname LIKE '$prefix%' ESCAPE '|'
+ AND c.relkind = 'r'
+ AND NOT pg_is_other_temp_schema(c.relnamespace)";
+ }
$this->query_start($sql, null, SQL_QUERY_AUX);
$result = pg_query($this->pgsql, $sql);
$this->query_end($result);

0 comments on commit 97f5b52

Please sign in to comment.