Première publication dimanche 20 mai 2001
Dernière modification
PostgreSQL est, comme MySQL, un moteur de gestion de bases de données gratuit et libre (il n'y a pas de contraintes pour l'utiliser et les sources des programmes sont disponibles). Il fonctionne sous différentes versions de Linux et d'Unix. On peut donc en récupérer les sources et les compiler l'installer. Les instructions qui suivent décrivent la procédure à suivre pour l'installation de PostgreSQL sur un ordinateur fonctionnant sous Mac OS X. Je commencerais par un petit avertissement, ensuite je décrirais la phase de préparation. Puis viendront l'installation et les premières manipulations pour rendre l'outil utilisable.
Les instructions qui suivent sont destinées à des personnes ayant quelques notions d'Unix ou de Linux. Il va falloir taper des commandes au clavier et non pas utiliser une méthode moderne comme par exemple utiliser sa voix et un gant numérique pour donner des ordres à son ordinateur. Si l'utilisation des commandes d'un shell Unix vous effraie, patientez encore un peu et il y a de fortes chances qu'apparaisse prochainement une version de cet outil avec un installateur convivial.
Si vous aviez déjà installé une version de PostgreSQL sur votre ordinateur, surtout consultez le site PostgreSQL et lisez bien les instructions concernant la mise à jour pour éviter de perdre des bases de données existantes.
Enfin, les instructions qui suivent sont valables pour un utilisateur ayant le droit d'administrer Mac OS X.
Il n'est possible d'installer PostgreSQL avec la méthode décrite ici que si les outils de developpement ont été installés sur votre machine. Cette méthode a été testée avec Mac OS 10.0.3, les outils développeur Apple (10.0 et 10.0.1) ainsi que PostgreSQL (7.1, 7.1.1 et 7.1.2), sur un iMac et sur un PowerBook G4.
La préparation va consister à créer un nouvel utilisateur, et ensuite avec des commandes d'un shell à créer un dossier de travail, télécharger les sources de PostgreSQL, les configurer et les compiler.
Utilisez la méthode décrite dans le document Création d'un utilisateur spécial sous Mac OS X pour créer un groupe "postgres" (name = "postgres
") ainsi qu'un utilisateur "postgres" (name = "postgres
", realname = "Serveur PostgreSQL"
, home = "/usr/local/pgsql/data
" ).
Pour la suite des opérations nous allons utiliser les commandes d'un shell et pour cela nous allons utiliser l'application Terminal. Elle se trouve dans le sous dossier "Utilities" (utilitaires) du dossier "Applications".
Lancer l'application "Terminal". Une fenêtre apparait. Un nouveau shell a été automatiquement démarré et attend vos commandes.
Si ce dossier n'existe pas créer le dossier "Installations" .
mkdir Installations
"Déplacez-vous" dans ce dossier (changer le dossier courant).
cd Installations
Téléchargez les sources de PostgreSQL.
wget ftp://ftp.fr.postgresql.org/pub/source/v7.1.2/postgresql-7.1.2.tar.gz
Décompressez les fichiers sources.
tar xzf postgresql-7.1.2.tar.gz
Déplacez-vous dans le dossier des sources.
cd postgresql-7.1.2
Configurez les fichiers.
./configure --enable-locale --enable-multibyte=UNICODE --enable-unicode-conversion --enable-syslog
La commande configure va d'une part prendre en compte les options qu'on lui indique, d'autre part faire toute une série de vérifications pour savoir de quoi est capable le système courant et modifier les fichiers en conséquence. L'option "--enable-locale
" permet de prendre en compte les réglages spécifiques à une langue. L'option "--enable-multibyte=UNICODE
" permet d'utiliser l'encodages de caractères UNICODE. L'option "--enable-unicode-conversion
" permet d'intégrer des outils de conversion entre différents encodages et l'option "--enable-syslog
" permet à PostgreSQL d'utiliser syslog pour enregistrer les messages.
Créez PostgreSQL (compilation des outils, bibliothèques et édition des liens).
make
C'est la partie la plus longue. Il est temps de faire une pause et de prendre un café.
Installez PostgreSQL.
sudo make install
La commande sudo
permet de lancer une commande en tant que super utilisateur (root). Lors d'une première invocation le mot de passe de l'utilisateur (pas celui de root) est demandé et si l'utilisateur est autorisé, la commande est exécutée. Il est ensuite possible de lancer plusieurs sudo
sans que le mot de passe soit demandé. Au bout d'un moment il est à nouveau nécessaire de taper son mot de passe.
La commande make install
va installer tout les outils nécessaires au fonctionnement de PostgreSQL dans le dossier /usr/local/pgsq
l.
Il se peut que l'installation échoue avec le message :
tar: Unable to set file uid/gid of index.html <No such file or directory>
make[1]: *** [install] Erreur 1
make: *** [install] Erreur 2
Ce n'est pas grave, l'ordinateur est trop rapide est essaie d'accéder à un fichier qui n'est pas encore arrivé ;-) Lancez une nouvelle fois la commande d'installation et tout devrait bien se passer. Avec la version 7.1.2 ce problème a disparu.
Il semble qu'une librairie ne soit pas correctement finie alors, pour finir, il faut ajouter la commande suivante.
sudo ranlib /usr/local/pgsql/lib/libpq.a
Bon, voilà, PostgreSQL est installé. Mais n'est pas utilisable pour l'instant. Il faut d'abord préparer un groupe de bases de données (database cluster) initial qui permet de gérer des bases de données et les droits d'accès associés. Ensuite il faudra lancer le serveur PostgreSQL, donner un mot de passe à l'utilisteur postgres, activer l'authentification par mot de passe, créer un nouvel utilisateur et une base de donnée pour cet utilisateur.
Créez un dossier pour un groupe de bases de données PostgreSQL.
sudo mkdir /usr/local/pgsql/data
Rendez l'utilisateur postgres propriétaire de ce dossier.
sudo chown postgres:wheel /usr/local/pgsql/data
Initialisez le groupe de bases de données.
sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data -E UNICODE
Modifiez les autorisations du groupe de bases de données pour que l'utilisateur postgres puisse accéder à son contenu.
sudo chmod 740 /usr/local/pgsql/data
Créez un dossier où ranger les fichiers log de PostgreSQL.
sudo mkdir /var/log/pgsql
Rendez l'utilisateur posgres propriétaire de ce dossier.
sudo chown postgres:wheel /var/log/pgsql
Lancez le serveur PostgreSQL en tant qu'utilisateur postgres.
sudo -u postgres /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l /var/log/pgsql/postgresql.log
Et quand vous avez fini vous pouvez arrêter le serveur.
sudo -u postgres /usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data
Les étapes précédentes ont permis de créer les outils initiaux et de lancer un serveur PostgreSQL qui n'accepte que des connexions via des "sockets" unix. Il existe aussi une option de lancement du serveur qui permet aussi les connexions via TCP/IP mais tout cela est décrit en détail dans la documentation ;-)
Pour l'instant il n'y a qu'un utilisateur, l'utilisateur postgres qui a tous les droits. Par défaut PostgreSQL est configuré pour que tous les utilisateurs locaux puissent se connecter sans mot de passe et initialement, l'utisateur postgres n'a pas de mot de passe. Ce qui signife que tout utilisateur local peut se connecter en tant que postgres et faire tout ce qu'il veut. Pour éviter les problèmes de sécurité que cela pose, il va falloir donner un mot de passe à l'utilisateur postgres et activer l'authentification par mot de passe. Attention la gestion des mots de passe de PostgreSQL est indépendante de celle de Mac OS X. Pour changer le mot de passe de l'utilisateur postgres vous allez utiliser le terminal interactif (il faut que le serveur PostgreSQL soit lancé). Ce terminal est lancé par la commande psql
avec laquelle vous indiquez le nom de la base de données à laquelle se connecter et le nom de l'utilisateur à utiliser pour la connexion. Lors de l'initialisation du groupe de bases de données une base template1
a été créée. Dans les instructions qui suivent, les lignes commançant par "shell>
" indiquent des commandes à taper au niveau du shell et celles commençant par "template1#
" indiquent les commandes à taper une fois le terminal interactif lancé.
shell> /usr/local/pgsql/bin/psql template1 postgres
template1# alter user postgres with password 'chita007';
template1# \q
La dernière commande "\q
" sert à quitter le terminal interactif PostgreSQL.
Une fois un mot de passe donné à l'utilisateur postgres vous allez activer l'authentification par mot de passe. Pour cela il va falloir modifier quelques lignes du fichier "/usr/local/pgsql/data/pg_hba.conf
".
Éditez le fichier "/usr/local/pgsql/data/pg_hba.conf
" (par exemple avec l'éditeur pico).
shell> sudo pico /usr/local/pgsql/data/pg_hba.conf
Recherchez les lignes :
local all trust
host all 127.0.0.1 255.255.255.255 trust
et modifiez-les ainsi (remplacer "trust" par "password") :
local all password
host all 127.0.0.1 255.255.255.255 password
Enregistrez les modifications, elles sont prises en compte immédiatement.
Lancez le terminal interactif en tant qu'utilisateur postgres et avec l'option "-W" pour forcer le terminal interactif à demander le mot de passe quand c'est nécessaire.
shell> /usr/local/pgsql/bin/psql -W template1 postgres
Créez un nouvel utilisateur. Pour l'instant cet utilisateur à le droit de créer des bases de données.
template1=# create user billg with password 'msisdead' createdb;
Si tout se passe bien vous verrez le message "CREATE USER
".
Connectez-vous à la base courante en tant que nouvel utilisateur.
template1=# \c - billg
Le terminal vous demande le mot de passe de l'utilisateur et affiche "You are now connected as new user billg.
".
Créez une base de données de même nom que l'utilisateur (cela simplifie les connexions ultérieures).
template1=> create database billg;
Le terminal répond "CREATE DATABASE
".
Connectez-vous à nouveau comme utlisateur postgres.
template1=> \c - postgres
Le terminal vous demande le mot de passe de postgres
et affiche "You are now connected as new user postgres.
"
Supprimez le droit de création de base de données au nouvel utilisateur.
template1=# alter user brogniar nocreatedb;
Le terminal répond "ALTER USER
".
Vous pouvez quitter maintenant le terminal interactif.
template1=# \q
Si le nom d'utilisateur Mac OS X, le nom d'utilisateur PostgreSQL et le nom de la base de données sont identiques vous pouvez vous connecter à votre base directement par :
shell> /usr/local/pgsql/bin/psql
Aller, juste une petite dernière pour la route, pour changer le mot de passe d'un utilisateur vous pouvez tapez la commande suivante :
template1=> alter user billg with password 'WillSurv';
Le manuel de Postgresql au format HTML a été automatiquement installé dans le dossier "/usr/local/pgsql/doc/html
". Pour en faciliter l'accès il est possible de faire un lien du dossier web de Mac OS X vers ce dossier.
Créez d'abord un dossier réservé aux documentations dans le dossier web de Mac OS X.
mkdir /Library/WebServer/Documents/doc
Créer ensuite dans ce dossier un lien vers la documentation Postgresql.
ln -fsh /usr/local/pgsql/doc/html /Library/WebServer/Documents/doc/postgresql
Pourquoi installer PostgreSQL plutôt que MySQL ? C'est plus une question de goût qu'autre chose. Chacun des deux se vante d'être meilleur que l'autre et le prouve, chiffres à l'appui. J'ai une préférence pour PostgreSQL car il "colle" mieux aux standards et sa documentation est plus claire (mais en anglais). Par contre si vous désirez créer et tester des bases qui doivent être ensuite dupliquées chez un prestataire d'hébergement, là il vaut mieux choisir MySQL qui est nettement plus répandu. Et si vous ne savez pas lequel choisir, les deux peuvent fonctionnez tranquillement sur la même machine.