diff options
author | Bruce Momjian <bruce@momjian.us> | 2010-10-20 00:55:16 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2010-10-20 00:55:16 +0000 |
commit | 333b4a45f1d984bd7f32aecb1ba551feed088ec4 (patch) | |
tree | 78f563a2fb442e8af089555f972f802f9523fc80 | |
parent | ad06db2610f479d559ee4a3b9e3241d40be07440 (diff) | |
download | postgresql-333b4a45f1d984bd7f32aecb1ba551feed088ec4.tar.gz postgresql-333b4a45f1d984bd7f32aecb1ba551feed088ec4.zip |
Cache most recent relfilenode lookups, for speed, after report of
pg_upgrade slowness for 150k tables.
-rw-r--r-- | contrib/pg_upgrade/info.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c index a8d0bddc191..946e6ccb6ba 100644 --- a/contrib/pg_upgrade/info.c +++ b/contrib/pg_upgrade/info.c @@ -423,11 +423,21 @@ relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname, const char *relname, Cluster whichCluster) { - int relnum; + static int relnum = 0; if (!rel_arr || !relname) return NULL; + /* Test most recent lookup first, for speed */ + if (strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 && + strcmp(rel_arr->rels[relnum].relname, relname) == 0) + return &rel_arr->rels[relnum]; + + if (relnum + 1 < rel_arr->nrels && + strcmp(rel_arr->rels[relnum + 1].nspname, nspname) == 0 && + strcmp(rel_arr->rels[relnum + 1].relname, relname) == 0) + return &rel_arr->rels[relnum + 1]; + for (relnum = 0; relnum < rel_arr->nrels; relnum++) { if (strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 && |