Installation de PostgreSQL

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
44
Mois de parution
octobre 2009
Spécialité(s)


Résumé

Installer PostgreSQL n'est pas compliqué. Que ce soit par les sources ou par un paquet, c'est généralement une question d'une dizaine de minutes. Nous allons voir comment l'installer à partir des sources, à partir du paquet Debian et à partir d'un paquet RPM.


Body

1. Installer à partir des sources

Il existe un paquet .tar.gz et un paquet .tar.bz2 pour chaque version disponible. Tout se trouve dans http://wwwmaster.postgresql.org/download/mirrors-ftp/source/. Si vous y jetez un œil, une fois un miroir sélectionné, vous verrez qu'il existe un répertoire pour les différentes versions disponibles. Si celle que vous cherchez ne s'y trouve, allez sur ftp://ftp-archives.postgresql.org. Toutes les versions, depuis la 1.0.8, ne s'y trouvent pas. Néanmoins, en ce qui nous concerne, inutile d'y aller, nous allons installer la dernière version disponible au moment de l'écriture de cet article, c'est-à-dire la 8.4.0.

PostgreSQL a une particularité très sympathique : il refuse de s'exécuter en tant que root. Il faut nécessairement un utilisateur qui ne soit pas un superutilisateur pour l'exécuter. Pour un vrai serveur, nous commencerions donc par créer un utilisateur simple, dont le nom sera généralement postgres par simplicité, mais tout autre nom irait bien. Notez que si vous ne pouvez pas créer un utilisateur, vous pouvez très bien exécuter le serveur PostgreSQL avec votre propre nom d’utilisateur. C'est d'ailleurs ce que nous allons faire.

Autre point important. Pour compiler PostgreSQL, vous avez besoin d'un certain nombre de logiciels :

- la commande make ;

- le compilateur C gcc ;

- bison ;

- flex ;

- le paquet développement de la bibliothèque readline ;

- le paquet développement de la bibliothèque zlib.

Vous pourriez avoir besoin de plus si vous activez certaines options, par exemple l'outil d'internationalisation des applications, gettext.

Tout ceci va vous donner la ligne suivante sous Debian :

aptitude install make gcc bison flex libreadline-dev libz-dev gettext

Comme nous n'avons pas à créer d'utilisateur, nous pouvons dès maintenant récupérer les sources à partir du compte qui exécutera le serveur PostgreSQL. Il suffit d'appeler wget avec la bonne URL pour récupérer les sources :

guillaume@debian1:~$ wget http://ftp4.fr.postgresql.org/pub/mirrors/postgresql/source/v8.4.0/postgresql-8.4.0.tar.bz2

--2009-07-25 19:17:06-- http://ftp4.fr.postgresql.org/pub/mirrors/postgresql/source/v8.4.0/postgresql-8.4.0.tar.bz2

Résolution de ftp4.fr.postgresql.org... 134.157.176.20

Connexion vers ftp4.fr.postgresql.org|134.157.176.20|:80... connecté.

requête HTTP transmise, en attente de la réponse... 200 OK

Longueur: 13839282 (13M) [application/x-bzip2]

Saving to: `postgresql-8.4.0.tar.bz2'

100%[==========================================================================================================================================>] 13 839 282   686K/s   in 25s

2009-07-25 19:17:31 (544 KB/s) - « postgresql-8.4.0.tar.bz2 » sauvegardé [13839282/13839282]

Notez la toute petite taille de ce paquet. Les sources, évidemment compressées, ne font que 14 Mo. De nos jours, c'est vraiment un tout petit paquet.

Décompressons l'archive et déballons tous les fichiers :

guillaume@debian1:~$ tar xfj postgresql-8.4.0.tar.bz2

guillaume@debian1:~$ ll postgresql-8.4.0

total 1692

-rw-r--r-- 1 guillaume guillaume    445 2004-04-23 20:15 aclocal.m4

drwxr-xr-x 2 guillaume guillaume   4096 2009-07-25 19:21 config

-rwxr-xr-x 1 guillaume guillaume 801991 2009-06-27 02:14 configure

-rw-r--r-- 1 guillaume guillaume 61116 2009-06-27 02:14 configure.in

drwxr-xr-x 41 guillaume guillaume   4096 2009-07-25 19:21 contrib

-rw-r--r-- 1 guillaume guillaume   1192 2009-01-01 18:23 COPYRIGHT

drwxr-xr-x 3 guillaume guillaume   4096 2009-07-25 19:21 doc

-rw-r--r-- 1 guillaume guillaume   4331 2009-01-15 02:53 GNUmakefile.in

-rw-r--r-- 1 guillaume guillaume 727455 2009-06-28 00:53 HISTORY

-rw-r--r-- 1 guillaume guillaume 78427 2009-06-28 00:53 INSTALL

-rw-r--r-- 1 guillaume guillaume   1423 2007-01-20 18:16 Makefile

-rw-r--r-- 1 guillaume guillaume   1287 2008-05-07 00:02 README

drwxr-xr-x 14 guillaume guillaume   4096 2009-07-25 19:21 src

Le contenu est tout à fait standard : un script configure pour créer le fichier Makefile, un répertoire doc pour la documentation, un répertoire src pour les sources, les fichiers habituels (COPYRIGHT, HISTORY, INSTALL, README). Bref, rien de transcendant. Seule petite nouveauté, le répertoire contrib qui contient tous les modules optionnels qui ne font pas (encore ?) partie du cœur de PostgreSQL.

L'étape suivante est le configure. Cette étape permet, comme son nom l'indique, de configurer le fichier Makefile en prenant en compte les spécificités de votre serveur. Ce script dispose de différentes options permettant d'activer ou de désactiver certaines fonctionnalités, voire de modifier la valeur de certains paramètres. Les options les plus importantes sont indiquées dans le tableau 1.

 

Option

Signification

--prefix

permet de préciser le répertoire d'installation de PostgreSQL

--with-openssl

active l'utilisation d'OpenSSL

--with-libxml

active l'utilisation de la bibliothèque libxml

--with-libxslt

active l'utilisation de la bibliothèque libxslt

--enable-integer-datetimes

utilise des nombres entiers pour représenter les dates et les heures (en 8.4, cette option est activée par défaut)

--enable-nls

active les langues (éventuellement précisées) utilisables par les applications PostgreSQL

Tableau 1 : Options essentielles de configure

Lançons l'opération configure en précisant le répertoire d'installation et en activant la langue française.

./configure --prefix=/home/guillaume/postgresql --enable-nls=fr

Une fois cette opération terminée avec succès, il faut lancer la compilation :

guillaume@debian1:~$ make

Si tout se passe bien, le texte suivant doit apparaître tout à la fin :

All of PostgreSQL successfully made. Ready to install.

Enfin, il faut installer le logiciel :

guillaume@debian1:~$ make install

Attention, vous pourriez avoir besoin des droits administrateur pour la copie des fichiers si le répertoire d'installation se trouve à un endroit où vous n'avez pas le droit d'écrire. Dans ce cas, il faudra exécuter la commande suivante avec sudo, ce qui donne la ligne suivante :

guillaume@debian1:~$ sudo make install

Si tout se passe bien, vous devriez voir le texte suivant tout à la fin :

PostgreSQL installation made.

À ce moment-là, nous disposons des exécutables et des fichiers nécessaires à l'exécution d'un serveur PostgreSQL. Pour informations, tout ceci pèse seulement 31 Mo sur votre disque, dont 13 Mo de documentation. Les sous-répertoires sont là aussi très habituels : bin pour les binaires, lib pour les bibliothèques, share pour les différents fichiers de données (comme les fichiers exemples de configuration, la documentation, les pages man, etc.) Le tableau 2 récapitule les exécutables disponibles et leur utilisation.

 

Exécutable

Intérêts

clusterdb

exécute l'instruction SQL CLUSTER

createdb

ajoute une base de données

createlang

ajoute un langage de procédures dans une base de données

createuser

ajoute un utilisateur

dropdb

supprime une base de données

droplang

supprime un langage de procédures

dropuser

supprime un utilisateur

ecpg

préprocesseur de SQL embarqué dans un code source en C

initdb

initialise une instance PostgreSQL

pg_config

renvoie une liste de paramètres indiquant la configuration des exécutables

pg_ctl

contrôle le moteur de la base de données (démarrage, arrêt, statut, rechargement de la configuration)

pg_dumpall

sauvegarde de l'instance complète (donc toutes les bases de données, mais aussi les objets globaux)

pg_restore

restaure une base de données d'après une sauvegarde

pg_controldata

affiche les informations de contrôle du cluster

pg_dump

sauvegarde une base de données

pg_resetxlog

supprime les journaux de transactions

postgres

programme responsable de la discussion entre un client et le moteur de base de données

postmaster

de nos jours, un simple lien vers l'exécutable postgres ; auparavant le processus père de tous les processus d'une instance PostgreSQL

psql

console interactive (permet d'exécuter des requêtes SQL, de faire de la maintenance, de récupérer la liste des objets d'une base et leurs définitions)

reindexdb

exécute l'instruction SQL REINDEX

vacuumdb

exécute l'instruction SQL VACUUM

Tableau 2 : Liste des exécutables de PostgreSQL

Il manque encore deux éléments pour terminer l'installation : l'initialisation de l'instance et l'ajout du script de démarrage.

Avant de pouvoir créer une base de données et d’y travailler, il faut tout d'abord créer une instance. Certains parlent aussi de « cluster ». Tout simplement, nous allons demander à PostgreSQL de créer les fichiers nécessaires au démarrage du serveur dans un répertoire que nous lui aurons préalablement indiqué. Ce répertoire peut être précisé soit en le donnant en argument de la commande initdb (avec l'option -D), soit en initialisant la variable d'environnement PGDATA. Il est préférable de passer par ce deuxième cas, en prenant soin d'initialiser cette variable par un script de connexion (.profile, .bash_profile ou .bashrc pour les plus courants) de l'utilisateur qui exécute le serveur PostgreSQL. Préférable, car cette variable est utilisée notamment par l'exécutable pg_ctl, ainsi que par pg_controldata.

guillaume@debian1:~$ cat <<_EOF_ >>~/.bashrc

> export PGDATA=/home/guillaume/postgresql-data

> export PATH=/home/guillaume/postgresql/bin:\$PATH

> _EOF_

guillaume@debian1:~$ source ~/.bashrc

guillaume@debian1:~$ initdb

Voici l'affichage qui s'ensuit avec une explication pour chaque partie :

Les fichiers de ce cluster appartiendront à l'utilisateur guillaume.

Le processus serveur doit également lui appartenir.

Comme j'ai exécuté initdb en tant qu'utilisateur guillaume, tous les fichiers auront cet utilisateur comme propriétaire. Le serveur PostgreSQL devra aussi être exécuté par cet utilisateur.

Le cluster sera initialisé avec la locale fr_FR.UTF-8.

L'encodage par défaut des bases de données a été configuré en conséquence avec UTF8.

L'instance utilise la locale par défaut du système (qui est surchargeable avec l'option -E). Les nouvelles bases de données seront aussi en UTF-8, sauf si l'utilisateur choisit de changer cela par un autre encodage qui soit compatible avec la locale UTF-8.

La configuration de la recherche plein texte a été initialisée à french.

La locale étant du français UTF-8, le français est utilisé comme configuration par défaut de la recherche par racine native.

création du répertoire /home/guillaume/postgresql-data... ok

création des sous-répertoires... ok

Les répertoires sont créés, le premier étant celui pointé par la variable PGDATA.

sélection de la valeur par défaut de max_connections... 100

sélection de la valeur par défaut pour shared_buffers... 28MB

création des fichiers de configuration... ok

Les fichiers de configuration sont ajoutés au répertoire de l'instance. Remarquons aussi que certaines variables d'un fichier de configuration sont testées pour s'adapter au matériel et au système d'exploitation du serveur.

création de la base de données template1 dans /home/guillaume/postgresql-data/base/1... ok

La première base de données, template 1, est créée.

initialisation de pg_authid... ok

initialisation des dépendances... ok

création des vues système... ok

chargement de la description des objets système... ok

création des conversions... ok

création des dictionnaires... ok

initialisation des droits sur les objets internes... ok

création du schéma d'informations... ok

Un certain nombre d'objets globaux et de catalogues système sont créés.

lancement du vacuum sur la base de données template1... ok

copie de template1 vers template0... ok

copie de template1 vers postgres... ok

Après un VACUUM sur la première base, les bases template0 et postgres sont créées en copiant la base initiale.

ATTENTION : active l'authentification trust pour les connexions locales.

Cela peut être modifié par l'édition de pg_hba.conf ou en utilisant l'option -A au prochain lancement d'initdb.

L'authentification trust est activée pour les connexions locales, ce qui signifie que n'importe qui peut se connecter au serveur PostgreSQL sans avoir à connaître de mot de passe. Heureusement, cela n'est vrai que pour les connexions locales (par socket de domaine Unix et par TCP/IP via l'adresse IP 127.0.0.1).

Succès. Vous pouvez maintenant lancer le serveur de bases de données par :

    postgres -D /home/guillaume/postgresql-data

ou

    pg_ctl -D /home/guillaume/postgresql-data -l journal_applicatif start

Nous sommes arrivés à la fin du message d'initdb. Il indique le succès de l'opération d'initialisation et précise comment lancer le serveur PostgreSQL.

L'option -D permet d'indiquer le répertoire de l'instance. Cela n'est pas nécessaire si la variable d'environnement PGDATA a bien été positionnée. Nous pouvons donc lancer la commande :

guillaume@debian1:~$ pg_ctl start

serveur en cours de démarrage

LOG: le système de bases de données a été arrêté à 2009-07-26 09:15:50 CEST

LOG: lancement du processus autovacuum

LOG: le système de bases de données est prêt pour accepter les connexions

Parfait, PostgreSQL démarre sans problème.

Il ne reste plus qu'à écrire un script de démarrage. En fait, il en existe un déjà écrit dans les modules contrib de PostgreSQL. Il suffit de le copier et d'ajuster certains paramètres pour qu'il soit fonctionnel.

guillaume@debian1:~$ cd postgresql-8.4.0/contrib/start-scripts

guillaume@debian1:~$ sudo cp linux /etc/init.d/postgresql

guillaume@debian1:~$ sudo vim /etc/init.d/postgresql

La partie à modifier se trouve dans ce bloc de texte (ligne 29 à 43) :

## EDIT FROM HERE

# Installation prefix

prefix=/usr/local/pgsql

# Data directory

PGDATA="/usr/local/pgsql/data"

# Who to run the postmaster as, usually "postgres". (NOT "root")

PGUSER=postgres

# Where to keep a log file

PGLOG="$PGDATA/serverlog"

## STOP EDITING HERE

J'ai modifié la variable préfix par /home/guillaume/postgresql, la variable PGDATA par /home/guillaume/postgresql-data et la variable PGUSER par guillaume. Évidemment, il faut revoir cela par rapport à votre contexte.

Testons le script :

guillaume@debian1:~$ sudo /etc/init.d/postgresql status

pg_ctl : le serveur est en cours d'exécution (PID : 2178)

/home/guillaume/postgresql/bin/postgres

guillaume@debian1:~$ sudo /etc/init.d/postgresql stop

Stopping PostgreSQL: LOG: a reçu une demande d'arrêt rapide

LOG: annulation des transactions actives

LOG: arrêt du processus autovacuum

LOG: arrêt en cours

LOG: le système de base de données est arrêté

guillaume@debian1:~$ /etc/init.d/postgresql start

Starting PostgreSQL: ok

Reste à s'assurer que PostgreSQL démarre au lancement du serveur. Sous Debian, il faut utiliser l'outil update-rc.d ainsi :

guillaume@debian1:~$ sudo update-rc.d postgresql defaults

Et voilà, PostgreSQL est installé et fonctionnel !

2. Installer à partir d'un paquet Debian

Pour éviter tous les (légers) tracas relatifs à l'installation après compilation, il est possible d'utiliser les paquets de sa distribution.

Sous Debian, il existe un groupe de paquets par version majeure. Cela permet d'installer plusieurs versions de PostgreSQL sur une même machine. L'installation se fait comme d'habitude avec les outils apt-get ou aptitude.

guillaume@debian1:~$ aptitude install postgresql-8.3

Cela peut vous installer une petite dizaine de paquets sur une Debian tout juste installée. Néanmoins, d'autres paquets peuvent vous intéresser comme les modules contrib (postgresql-contrib-8.3), la documentation (postgresql-doc-8.3) ou encore un langage de procédures stockées (postgresql-plperl-8.3 pour le Perl).

La version installée par la commande suivante concerne la version majeure 8.3. Or, la 8.4 existe. Elle ne sera disponible qu'en backport pour Lenny. Vous devez tout d'abord modifier votre fichier /etc/apt/sources.list pour intégrer ce nouveau dépôt en insérant cette ligne :

deb http://www.backports.org/debian lenny-backports main contrib non-free

Puis, il faut mettre à jour la liste des paquets

aptitude update

et installer la version 8.4 :

aptitude install postgresql-8.4

La particularité du paquet Debian est que l'installation du paquet cause l'initialisation de l'instance. Cette dernière est installée par défaut dans le répertoire /var/lib/postgresql/8.3/main (remplacez le 8.3 par la version majeure que vous avez installée). L'autre importante particularité de Debian est que les fichiers de configuration ne sont pas stockés dans le répertoire de l'instance. Il se trouve dans le répertoire /etc/postgresql/8.3/main (là aussi, remplacez le 8.3 par la version majeure que vous avez installée).

Expliquons un peu ces chemins. Le sous-répertoire 8.3 indique la version majeure, le sous-répertoire main est le nom de l'instance. Il est en effet possible avec le paquet Debian de créer plusieurs instances de PostgreSQL pour la même version stable. L'intérêt est limité dans ce cas.

Pour permettre une gestion simple des différentes instances et des différentes versions des exécutables, Debian fournit un ensemble de wrappers et de scripts. Le tableau 3 en liste les principaux.

 

Exécutable

Intérêts

pg_createcluster

Ajout d'une instance

pg_dropcluster

Suppression d'une instance

pg_upgradecluster

Mise à jour d'une instance

pg_lscluster

Liste des instances et de leur statut

pg_ctlcluster

Contrôle des instances

Tableau 3 : Liste des exécutables Debian supplémentaires

3. Installer à partir d'un paquet RPM

Sous Fedora, il existe aussi des paquets pour PostgreSQL. Il vous suffit d'un :

yum install postgresql postgresql-server

Et vous vous trouvez avec un PostgreSQL 8.3 (pour une Fedora 11).

La première différence avec les paquets Debian, c'est qu'aucune instance n'est créée automatiquement. Vous devez exécuter le script de démarrage avec l'option initdb de cette façon :

/etc/init.d/postgresql initdb

Initializing database: ok

Attention à SELinux qui peut causer bien des soucis.

L'instance est créée dans le répertoire /var/lib/pgsql/data. Les fichiers de configuration sont aussi dans ce répertoire. On peut donc dire que le paquet RPM de Fedora est bien plus proche de ce qu'on obtiendrait en compilant PostgreSQL.

À noter qu'il est possible d'avoir la dernière version majeure (la 8.4) grâce aux paquets disponibles sur le site http://yum.pgsqlrpms.org/.

Conclusion

Comme vous avez pu le constater vous-même, l'installation de PostgreSQL est réellement simple, d'autant plus si vous choisissez l'option des paquets de votre distribution. C'est d'ailleurs ce qui est généralement conseillé. Vous bénéficiez des mises à jour de votre distribution, et vous n'avez pas à gérer les options à intégrer dans le programme. C'est autant de temps gagné que vous devriez plutôt passer sur la configuration de PostgreSQL.

 



Article rédigé par

Par le(s) même(s) auteur(s)

Supervision d’une instance PostgreSQL

Magazine
Marque
Linux Pratique
Numéro
142
Mois de parution
mars 2024
Spécialité(s)
Résumé

Maintenant que nous sommes rassurés suite à l’installation de solutions de sauvegarde [1], il est temps de s’occuper de la supervision de notre instance. Il existe différents types d’outils, certains en ligne de commandes, certains graphiques (généralement une application web), certains font de la rétro-analyse alors que d’autres font de la supervision en direct. Encore une fois avec PostgreSQL, les outils sont nombreux et la difficulté vient principalement du choix offert.

Les derniers articles Premiums

Les derniers articles Premium

La place de l’Intelligence Artificielle dans les entreprises

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 125 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous