Accueil - Informatique - Bases de données

Installation et administration de PostgreSQL sous Linux

Publié le jeudi 24 juin 2004.


Installation

Si l’installation de PostgreSQL n’a pas été réalisée lors de la mise en place du système, il sera nécessaire d’installer manuellement les différents paquetages avec la commande :

rpm -ivh <paquets>

La liste des packetages installés sur le serveur ird-us025 est la suivante :

[ird-us025-jgrelet:]/data>
$ rpm -qa|grep postgre
postgresql-server-7.3.4-11
postgresql-jdbc-7.3.4-11
postgresql-devel-7.3.4-11
postgresql-tcl-7.3.4-11
postgresql-contrib-7.3.4-11
postgresql-libs-7.3.4-11
postgresql-7.3.4-11
postgresql-pl-7.3.4-11
[ird-us025-jgrelet:]/data>
$ rpm -qa|grep DB    
perl-DBI-1.37-1
unixODBC-2.2.5-9
perl-DBD-Pg-1.22-1

Pour connaître la liste des paquetages installés :

$ rpm -ql <nom_du_paquet>

exemple :

$ rpm -ql postgresql-7.3.4-11
/usr/bin/clusterdb
/usr/bin/createdb
...

L’installation va créer un lien symbolique /etc/rc3.d/S85postgresql vers le script de démmarrage se trouvant sous /etc/rc.d/init.d/postgresql, ce qui permet d’assurer un démarrage automatique du serveur lorsque l’on reboote la machine.

Comme pour les autres démons, on peut démarrer ou arreter le serveur en étant root par la commande :

# /etc/rc.d/init.d/postgresql {start | stop }

ou mieux :

# /sbin/service postgresql {start | stop }

La documentation est installée dans le répertoire /usr/share/doc/postgresql-7.3.4 et est également accessible en ligne sur l’intranet comme l’ensemble des autres documentations utiles à l’US025.

On vérifiera que le programme fonctionne en arrière plan :

ps aux |grep postgres

Le processus suivant appartient à l’utilisateur postgres est en exécution :

postgres  4426   /usr/bin/postmaster -p 5432

Le processus d’installation à créé une arborescence sous /var/lib/pgsql, avec 2 bases initiales qui s’appellent postgres et template1.

Sous l’utilisateur postgres ou root, éditer le fichier de configuration /var/lib/pgsql/data/postgresql.conf
et autoriser les connections par le réseau au serveur :

tcpip_socket = true

Vérifier également l’initialisation des variables locales comme :

timezone = UTC
#
#       Locale settings
#
# (initialized by initdb -- may be changed)
LC_MESSAGES = 'fr_FR.UTF-8'
LC_MONETARY = 'fr_FR.UTF-8'
LC_NUMERIC = 'fr_FR.UTF-8'
LC_TIME = 'fr_FR.UTF-8'

Editer également le fichier pg_hba.conf pour modifier ou ajouter/restreindre les autorisations d’accés au travers du réseau en fonction des contraintes liées à la sécurité.

Par défaut, seules les sockets Unix sont activés. Cette autorisation peut également être activées en spécifiant l’option -i au programme /usr/bin/postmaster ou avec l’option -0 -i du script /usr/bin/pg_ctl

Exemple :

/usr/bin/pg_ctl -o -i -D /var/lib/pgsql/data -l logfile start

Initialiser PostgreSQL

su -l pgsql -c initdb

On se consultera les pages man et autres fichiers README, INSTALL car les procédures de démarrage varient quelque peu d’une version/distribution à une autre.

Tests

Tester le fonctionnement du serveur en se connectant avec le client psql.

$ su -l postgres
Password:
-bash-2.05b$ psql -d template1
Welcome to psql 7.3.4-RH, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
      \h for help with SQL commands
      \? for help on internal slash commands
      \g or terminate with semicolon to execute query
      \q to quit

template1=#

Utilisation du langage plpgsql

Pour utiliser le langage procédural plpgsql, il est nécessaire de configurer PostgreSQL avec la commande suivante :

createlang plpgsql template1

Voir le lien suivant pour plus d’informations.

Création d’une base

Pour créer des bases de données vides ou des utilisateurs on utilisera les scripts fournit avec PostgreSQL :

$ createdb <database>

en étant root

# createdb -U pgsql  <database>

Il est plus simple de créer une base vide pour l’utilisateur afin qu’il puisse se connecter à postgreSQL directement avec la commande psql.

Il devra ensuite se connecter à sa base avec \c sous psql ou avec des outils graphiques gratuits comme pgadmin3.

Pour plus d’informations sur les commandes, utiliser l’option help :

# createdb --help

Suppression d’une base

$ dropdb <database>

Sauvegarde d’une base

$ pg_dump -f <file> <dbname>     # utilise copy
$ pg_dump -d -f <file> <dbname>  # utilise insert
$ pg_dump -C -f <file> <dbname>  # met l'instruction createdb
$ pg_dump -C -f you_base_dump-11052004.sql your_base

Sauvegarde totale

$ pg_dumpall -h localhost -U <user> -c > file.sql       

Mise à jour du serveur

Le format de stockage interne des données sous PostgreSQL ayant changé entre les versions 7.1.x, 7.2.x, 7.3.x et 7.4.x il est nécessaire de sauvegarder l’intégralité des données de la base avant toute mise à jour (upgrade) majeur du service.

Pour cela, réaliser une sauvegarde globale de la base (backup) avec pg_dumpall :

$ cd /your_path_for_backup
$ pg_dumpall -h localhost -U <user>  -c > outfile.sql       

Arreter PostgreSQL avec la commande service ou kill :

# kill -INT `cat /usr/local/pgsql/data/postmaster.pid | sed 1q`

ou

# /etc/rc.d/init.d/postgresql stop

ou

# /sbin/service postgresql stop

Même si on installe le service au même emplacement, il est préférable par précaution, de déplacer le répertoire de la base :

# mv /var/lib/pgsql /usr/local/pgsql.old

Mettre à jour PostgreSQL avec la commande rpm ou yum si vous installez directement les binaires :

# yum update postgres*

Lors de l’installation, le paquetage postgresql-server-7.4.2-1 va créer un nouveau répertoire pour le compte postgres contenant :

/var/lib/pgsql
/var/lib/pgsql/.bash_profile
/var/lib/pgsql/backups
/var/lib/pgsql/data

Si vous désirez changer l’emplacement des fichiers de la base, il faudra déplacer ce répertoire de /var/lib/pgsql vers /usr/local/pgsql par exemple.

Ne pas oublier de modifier le répertoire de l’utilisateur postgres dans le fichier /etc/passwd.

Créer le fichier /etc/sysconfig/pgsql/postgresql qui contiendra
PGDATA=/usr/local/pgsql/data
Le script de démarrage du serveur /etc/init.d/posgresql utilisera alors cette variable PGDATA.

Ensuite ouvrir une session sous le compte posgres, vérifier l’emplacement et les droits avec les commandes pwd et ls -la puis initialiser la base en démarrant le service.

# /sbin/service postgresql start

Une fois que le service fonctionne correctement, vérifier qu’il tourne correctement et utilise le bon répertoire :

\ps aux|grep postgres
... 0:00 /usr/bin/postmaster -p 5432 -D /usr/local/pgsql/data

puis modifier la configuration du serveur et les autorisations d’accès en éditant les fichiers :

/usr/local/pgsql/data/pg_hba.conf
/usr/local/pgsql/data/postgresql.conf

Démarrer le serveur, vérifier son fonctionnement avec un client psql (en local puis en réseau depuis un autre client), puis restaurer la sauvegarde :

$ cd /your_path_for_backup
$ psql -d template1 -f outfile.sql

Normalement, c’est gagné si tout c’est bien passé.

Voir également, la documentation officielle de PostgreSQL.

Lire également les fichiers README sous /usr/share/doc/postgresql-7.4.2

Utilisation du module Perl ::DBI avec PostgreSQL

L’interface de SGBD Perl (Perl Database Interface - DBI) est une interface logicielle d’accès à un SGBD (Application Programming Interface - API) pour le langage PERL.

Les spécifications de l’API DBI perl définissent un ensemble de fonctions, de variables et de conventions d’accès à un SGDB cohérent et indépendant du SGBD utilisé.

Pour utiliser l’API Perl DBI, installer au préalable les modules suivants :

$ perl -MCPAN -e 'install DBI'
$ perl -MCPAN -e 'install DBD::Pg'

Liens utiles

www.postgresql.org