WIP patch: Improve relation size functions such as pg_relation_size() to avoid producing an error when called against a no longer visible relation
Phil Sorber <phil@omniti.com>
From: Phil Sorber <phil@omniti.com>
To: pgsql-hackers@postgresql.org
Cc: OmniTI DBA <dba@omniti.com>
Date: 2011-12-17T20:52:29Z
Lists: pgsql-hackers
Attachments
- improve_relation_size_functions.patch (text/x-patch) patch
Attached is a patch that addresses the todo item "Improve relation size functions such as pg_relation_size() to avoid producing an error when called against a no longer visible relation." http://archives.postgresql.org/pgsql-general/2010-10/msg00332.php Instead of returning an error, they now return NULL if the OID is found in pg_class when using SnapshotAny. I only applied it to 4 functions: select pg_relation_size, pg_total_relation_size, pg_table_size and pg_indexes_size. These are the ones that were using relation_open(). I changed them to using try_relation_open(). For three of them I had to move the try_relation_open() call up one level in the call stack and change the parameter types for some support functions from Oid to Relation. They now also call a new function relation_recently_dead() which is what checks for relation in SnapshotAny. All regression tests passed. Is SnapshotAny the snapshot I should be using? It seems to get the correct results. I can drop a table and I get NULL. Then after a vacuumdb it returns an error.