vai a: PostgreSQL nel blog
Esempio di upgrade di postgresql dalla versione 8.4.13 alla versione 9.2.6 in Centos 5.8. L’upgrade di versione necessita della fase di dump/restore oppure dell’utilizzo di pg_upgrade ( questo dalla versione 9.0) per consentire la migrazione della base dati alla nuova versione. Per poter utilizzare il pg_update deve essere supportata l’esecuzione in parallelo di postgresql come avviene in debian o Centos 6. Centos 5 putroppo non la supporta pertanto sarà necessario utilizzare il dump/restore.
Creare una directory di backups, procedere al dump degli oggetti globali (roles e tablespaces) e di tutto il server, volendo si possono salavare in automatico i singoli db:
mkdir /home/pgsqlbck chown postgres:postgres /home/psqlbck su - postgres pg_dumpall --globals-only > /home/pgsqlbck/dump-data_globals.sql pg_dumpall > /home/pgsqlbck/dump-data_alldb.sql exit
I singoli db di postgresql 8.4 possono essere copiati utilizzando lo script nel link di seguito
Script per il backup dei database di postgresql
Fermiamo il servver postgresql
service postgresql stop
Per installare la nuova versione di postgresql utilizziamo il repository yum per rpm. Nella pagina sotto linkata sono disponibili le varie combinazioni di distribuzione e versione postgresql
PostgreSQL RPM Repository (with Yum)
Installiamo il repository di postgresql 9.2 per centos 5 – i386
cd /usr/local/src wget http://yum.pgrpms.org/9.2/redhat/rhel-5-i386/pgdg-centos92-9.2-6.noarch.rpm rpm -ivh pgdg-centos92-9.2-6.noarch.rpm
Adesso escludiamo postgrsql dal processo standard di update dei pacchetti editando il file etc/yum.repos.d/CentOS-Base.repo aggiungendo la riga
exclude=postgresql*'
nelle sezioni [base] [updates]
ad esempio nella sezione base il risultato sarà del tipo:
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
...
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=postgresql*
Controlliamo i pacchetti disponibili
yum list | grep ‘postgresql’
nella lista saranno presenti pacchetti postgres84 versione installata e i pacchetti della versione 92 di postgresql
postgresql84.i386 8.4.13-1.el5_8 installed postgresql84-contrib.i386 8.4.13-1.el5_8 installed ..... postgresql92.i386 9.2.2-1PGDG.rhel5 pgdg92 postgresql92-contrib.i386 9.2.2-1PGDG.rhel5 pgdg92 postgresql92-debuginfo.i386 9.2.2-1PGDG.rhel5 pgdg92
adesso rimuoviamo la versione precedente postgresql84
yum remove postgresql84*
installiamo la versione postgresql92
yum install postgresql92 postgresql92-server postgresql92-contrib postgresql92-libs
inizializziamo la base dati e avviamo il server postgresql-9.2
service postgresql-9.2 initdb service postgresql-9.2 start
le basi dati di postgresql in Cenrtos sono localizzate in /var/lib/psql
:</var/lib/pgsql>$ ls -lhG drwx------ 4 postgres 4.0K Dec 28 12:20 9.2 drwx------ 12 postgres 4.0K Dec 28 11:21 data
/data per il postgresql base e ovviamente /9.2 per la versione che si sta installando
su - postgres psql < /home/pgbck/dumpalldb.sql
Ripristinare le modifiche ai files di configurazione /var/lib/pgsql/data/*.conf
in particolare postgresql.conf e pg_hba.conf
il file pg_hba.conf con le vecchie impostazioni relative alla autenticazione dei client, cioè il file che controllare quale host accede è a che cosa, può essere copiato dal precedente cluster che era stato rinominato:
cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/9.2/data/pg_hba.conf
per essere in linea con le nuove caratteristiche di postgresql 9.2 appendiamo il seguente nuovo blocco commentato, presente di default nel file pg_hba.conf della versione 9.2
# Allow replication connections from localhost, by a user with the # replication privilege. #local replication postgres peer #host replication postgres 127.0.0.1/32 ident #host replication postgres ::1/128 ident
La modifica può essere apportata utilizzando echo con comandi riportati di seguito. Possiamo usare tail -f pg_hba.conf su altro temrinale per seguire le modifiche in real time apportate a pg_hba.conf
: cd /var/lib/pgsql/9.2/data su postgres echo '# Allow replication connections from localhost, by a user with the' >> pg_hba.conf echo '# replication privilege.' >> pg_hba.conf echo '#local replication postgres peer' >> pg_hba.conf echo '#host replication postgres 127.0.0.1/32 ident' >> pg_hba.conf echo '#host replication postgres ::1/128 ident' >> pg_hba.conf
possiamo anche modificare il permesso ident in peer della condizione
:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
in
:
local all all peer
riavviamo
service postgresql-9.1 restart
controlliamo il risultato scorrendo la lista dei db importati
su - postgres vacuumdb --all --analyze-only psql \l
controlliamo e Impostiamo l’avvio automatico e il runlevel per il servizio postgresql 9.2
$ chkconfig --list | grep postgresql* postgresql-9.2 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ora impostiamo l’avvio automatico con
chkconfig --level 35 postgresql-9.2 on
Altri post e risorse: