Allora oggi mi è capitato di risolvere un problema su un sistema di replicazione e spero che questo post sia utile a qualsiasi developer. Il sistema funzionava e le replicazioni erano corrette, ma si aveva un problema durante la creazione delle tabelle con OID. Il fatto è che il contatore non so come mai nei due server non era lo stesso, perciò al CREATE TABLE nel serverA si aveva OID xxx e nel server B si aveva yyyy e nel momento che si andava ad operare sulla tabella appena creata si aveva l’errore: backend mismatch

Per prima cosa occorre trovare nel server l’OIDS massimo … se l’errore lo avete come me nella creazione dei database, ecco la query:

SELECT oid,* from pg_database ;

Trovato il numero massimo per allineare l’OID dei due server (la guida è stata fatta per una debian/ubuntu e per postgreSQL 8.4, se avete una versione differente al 4 mettete la vostra versione).

  1. Arrestare PgPool
  2. collegarsi ai server della replicazione e stoppare postgreSQL /etc/init.d/postgresql-8.4 stop
  3. andare nella cartella bin di PostgreSQL cd /usr/lib/postgresql/8.4/bin/
  4. prendere i privilegi di postgres su postgres
  5. eseguire il seguente comando ./pg_resetxlog -o nuovo_OID /directory/dove/si/trova/la/datadir/di/postgresql
  6. Riavviate i server della replicazione
  7. Avviare PgPool

 

Lascio il collegamento al sito ufficiale di PostgreSQL per il comando pg_resetxlog ( http://www.postgresql.org/docs/8.2/static/app-pgresetxlog.html )