Mysterious table that exists but doesn't exist

From: Dale Fukami <dale(dot)fukami(at)gmail(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Mysterious table that exists but doesn't exist
Date: 2013-04-16 20:29:48
Message-ID: CAAHkhS48yqHxv97ee0DZ4c0cMb9PQsSGKuH=Lpf8HqA_L+VwrA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

I'm having a problem on a standby server (streaming replication) where a
table seems to exist but is not queryable. Essentially a select statement
(and drop/insert/etc) fails but \d and pg_tables show it exists. The table
exists on the master (and is queryable) and replication is still working in
that changes to the master table don't cause errors on the standby and
changes to other tables are replicated and verified to be on the standby.
Queries from the standby pasted below.

I have a couple of questions that arise from this:

1) Any thoughts on what is going on here?
2) If there were corruption or something in the data for that particular
table on the standby only, would replication report a failure (i.e., be
unable to apply the binary changes) or would the binary changes still just
sort of happen overtop the bad data? Because in this case, replication is
still running without reporting any errors.
3) We managed to discover this by accident during some other routine work
we do from a snapshot we'd taken of the standby drives (6 volume raid0). I
had assumed that if replication and the pg_last_xlog_receive_location
information was up to date then I was safe but, in this case, replication
continued to run but the standby is essentially unusable as a failover
option since this table is not available. Is there some other way to be
certain that a standby server is "consistent" with master?

Thanks,
Dale

psql session output
----------------------------

live=# set search_path to someschema;
SET
live=# select * from tracked_deductibles;
ERROR: relation "tracked_deductibles" does not exist
LINE 1: select * from tracked_deductibles;
live=# select * from someschema.tracked_deductibles;
ERROR: relation "someschema.tracked_deductibles" does not exist
LINE 1: select * from someschema.tracked_deductibles;

live=# select *,'X'||tablename||'X' from pg_tables where schemaname =
'someschema' and tablename ilike '%tracked%';
schemaname | tablename | tableowner | tablespace |
hasindexes | hasrules | hastriggers | ?column?
------------+-------------------------+------------+------------+------------+----------+-------------+---------------------------
someschema | tracked_deductibles | live | | t
| f | t | Xtracked_deductiblesX
someschema | tracked_deductibles_log | live | | t
| f | f | Xtracked_deductibles_logX
(2 rows)

live=#\d
List of relations
Schema | Name |
Type | Owner
------------+-------------------------------------------------------------+----------+-------
<snip>
someschema | tracked_deductibles |
table | live
someschema | tracked_deductibles_id_seq |
sequence | live
<snip>

Responses

Browse pgsql-general by date

  From Date Subject
Next Message John R Pierce 2013-04-16 20:35:57 Re: JDBC driver versions
Previous Message Ramsey Gurley 2013-04-16 20:13:33 JDBC driver versions