[Pgpool-general] vacuum fails due to toast table difference

Tatsuo Ishii ishii at sraoss.co.jp
Wed Mar 2 00:08:27 UTC 2011


> I am using postgres 8.3.5 & pgpool 2.2.2 with:
>     replication_mode = true
>     load_balance_mode = true
>     replicate_select = false
>     reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
>     master_slave_mode = false
>     parallel_mode = false
> 
> I run psql -p9999 -ddmaip -c"vacuum full verbose analyze ;"
> 
> and get the following failure:
> 
> INFO:  vacuuming "pg_toast.pg_toast_58429"
> ERROR:  kind mismatch among backends. Possible last query was: "vacuum full
> verbose analyze ;" kind details are: 0[N] 1[C]
> HINT:  check data consistency among db nodes
> server closed the connection unexpectedly
>         This probably means the server terminated abnormally
>         before or while processing the request.
> connection to server was lost
> 
> This is because this toast table is only present in the primary:
> 
> 0: psql -p9999 -ddmaip
> 
> dmaip=# \d pg_toast.pg_toast_58429
> TOAST table "pg_toast.pg_toast_58429"
>    Column   |  Type
> ------------+---------
>  chunk_id   | oid
>  chunk_seq  | integer
>  chunk_data | bytea
> 
> 0: psql -p2345 -ddmaip
> 
> dmaip=# \d pg_toast.pg_toast_58429
> TOAST table "pg_toast.pg_toast_58429"
>    Column   |  Type
> ------------+---------
>  chunk_id   | oid
>  chunk_seq  | integer
>  chunk_data | bytea
> 
> 1: psql -p 2345
> 
> dmaip=# \d pg_toast.pg_toast_58429
> Did not find any relation named "pg_toast.pg_toast_58429".
> 
> Questions:
> 
> 
>    1. Did this happen because the toast tables are not replicated?

Yes. PostgreSQL assigned a toast table name by using OID, which is not
guaranteed to be replicated by pgpool. Toast table names are very
internal ones, and for ordinary SQL commands such as
SELECT/INSERT/UPDATE/DELETE should have no problem.
 
>    2. Is there a way around this without shutting down this production
>    system?

It is not recommended to use VACUUM via pgpool. You should directly
connect to PostgreSQL and issue VACUUM command.

>    3. Is there a way to avoid this in future?

Ditto above.

>    4. Does anyone know what the "N" means in: 0[N] 1[C]?

DB node 0 gave you a NOTICE message, while DB node 1 gave you command
complete response, which is precisely explained in "Frontend/Backend
Protocol" section of PostgreSQL docs.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp


More information about the Pgpool-general mailing list