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).
- Arrestare PgPool
- collegarsi ai server della replicazione e stoppare postgreSQL /etc/init.d/postgresql-8.4 stop
- andare nella cartella bin di PostgreSQL cd /usr/lib/postgresql/8.4/bin/
- prendere i privilegi di postgres su postgres
- eseguire il seguente comando ./pg_resetxlog -o nuovo_OID /directory/dove/si/trova/la/datadir/di/postgresql
- Riavviate i server della replicazione
- 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 )
Add One