Installer Postgresql

Installer Postgresql sous freeBSD

Postgresql est reconnu pour être un excellent SGBD, plusieurs fois récompensé pour ses performances, même comparé à Oracle. Il possède en plus, l'avantage d'être open source (donc gratuit).

Pour donner un ordre d'idée de la vélocité de postgresql, avec mon modeste serveur (VIA 1 GHz, 512 Mo de RAM), je charge un fichier de 800 000 enregistrements dans une table identique en moins de 3 secondes, ce qui acceptable et plus rapide qu'oracle dans les mêmes conditions (8s).

Comparé à MySQL, Postgresql a plus de maturité, possède des fonctions plus avancées, un langage de programmation avancé… Tout ce qui est nécessaire à la fois à un développeur ou à un SI en production.

Toutes les informations de ce document font référence à une installation postgresql 8.0 sous FreeBSD 6.0. Pour d'autres versions ou d'autres systèmes, il faudra les adapter en fonction du contexte. Mais globalement, la configuration et l'utilisation doivent rester sensiblement identiques.

Installer Postgresql

Sous FreeBSD, l'instllation de Postgresql ne pose aucun problème particulier grâce aux système de ports. Toutefois, dans certains conextes bien précis, il sera peut-être utile de recompiler Postgresql avec des options particulières. Chaque configuration ayant son contexte, je ne peux pas me permettre de tout traiter ici. nous nous limiterons donc à l'installation standard qui doit, dans la majorité des cas, être plus que suffisante.

Configurer Postgresql

Etape 1 : Initialiser Postgresql

Avant toute chose, il faut initialiser le SGBD car aucune structure n'est encore créée. Pour cela, il faut exécuter un initdb.

Le paquet pré-compilé Postgresql installe le SGBD dans /usr/local/pgsql. Sous ce répertoire, le répertoire data contient les informations du SGBD, c'est-à-dire à la fois les données en elles-mêmes (bases, tables, droits, etc.) mais aussi la configuration du serveur (accès réseau, etc.). Cependant postgresql ne peut pas être exécuté directement avec un compte autre que celui du serveur (par sécurité). A l'installation, un nouvel utilisateur spécifique a été créé, normalement pgsql :

#su -l pgsql -c initdb
initdb: no data directory specified
You must identify the directory where the data for this database system
will reside.  Do this with either the invocation option -D or the
environment variable PGDATA.

Le message est explicite, il faut définir la variable PGDATA ou utiliser l'option -D. Initialisons la variable PGDATA de la façon suivante :

# set PGDATA = ( /usr/local/pgsql/data )

puis initialisons le serveur de base de données :

# su -l pgsql -c initdb
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.

The database cluster will be initialized with locale C.
The default database encoding has accordingly been set to SQL_ASCII.
The default text search configuration will be set to "english".

fixing permissions on existing directory /usr/local/pgsql ... ok
creating subdirectories ... ok
selecting default max_connections ... 40
selecting default shared_buffers/max_fsm_pages ... 28MB/179200
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    postgres -D /usr/local/pgsql
or
    pg_ctl -D /usr/local/pgsql -l logfile start

Vous constatez que initdb crée tous les répertoires. Et si vous aller dans le répertoire racine, vous verrez aussi les fichiers de configuration.

Etape 2 : Paramétrage

rc.conf

Pour activer postgresql au démarrage, il faut ajouter la ligne :

postgresql_enable="YES"
postgresql_data="/usr/local/pgsql"

dans le fichier /etc/rc.conf. La ligne postgresql_data sert à indiquer l'endroit où se situe la racine du serveur. Elle est requise dans le cas où postgres chercherait le fichier de configuration à un autre endroit (par exemple /usr/local/pgsql/data).

pg_hba.conf

Le fichier pg_hba.conf situé dans le répertoire d'installation de postgresql contient les informations nécessaires pour gérer les autorisations d'accès au serveur. Ce fichier contient aussi les explications (en anglais) concernant le fichier, la façon de le remplir et les différentes possibilités de cryptage des connexions. Par défaut, le fichier autorise tout le trafic du réseau local, sans aucun cryptage, pour IPv4 et IPv6.

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust

A vous d'ajouter votre politique de sécurité, par exemple :

# Connexions depuis le réseau local
host    all         all         192.168.0.0/24        trust
host    all         all         192.168.1.0/24        trust

Qui autorise les connexions depuis les réseaux 192.168.0 et 192.168.1 sans cryptage.

Si les utilisateurs se connectent depuis un endroit protégé (réseau interne), il n'est pas utile de chiffrer les connexions, sauf si la politique de sécurité l'oblige ou par défi. Mais un un premier, avant de voir compliqué, nous nous bornerons à faire une installation simple.

En revanche, si des connexions doivent se faire depuis un site distant, il est plus que conseillé de chiffrer les connexions.

Une fois la politique de sécurité mise en place, le serveur est prêt à recevoir des connexions.

postgresql.conf

Le fichier postgresql.conf est le fichier qui paramètre le comportement interne de postgresql. Dans ce fichier, on trouve de nombreuses choses, gestion de la mémoire et des limitations en tous genres, le port d'écoute (par défaut 5432), les adresses à écouter, le nombre maximal de connexions autorisé, le comportement du log (syslog, console...), etc.

Pensez notamment à renseigner la variable listen_addresses qui, par défaut, n'écoute que les connexions en local.

Pour accepter toutes les connexions, il faudra mettre :

listen_addresses = '*'

Etape 3 : Démarrer postgresql

Pour démarrer postgresql, il suffit d'exécuter à présent /usr/local/etc/rc.d/postgresql start (ou restart).

Si la configuration est correcte, il ne devrait pas y avoir d'erreurs.

Etape 4 : Créer un superutilisateur

Comme pour un système d'exploitation, il faut créer un utilisateur avec suffisamment de droits pour administrer le serveur, par exemple superuser :

# su pgsql
$ /usr/local/bin/createuser superuser
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) y
CREATE USER

Pour l'instant, votre administrateur n'a pas de mot de passe. il faudra en définir un par la suite.

A partir de là, vous pouvez normalement vous connecter. En local, essayez :

# psql -U DBA -l
       List of databases
   Name    | Owner | Encoding
-----------+-------+-----------
 postgres  | pgsql | SQL_ASCII
 template0 | pgsql | SQL_ASCII
 template1 | pgsql | SQL_ASCII
(3 rows)

A partir d'une machine distante, essayez :

# psql -h ip_du_serveur -U DBA -l
       List of databases
   Name    | Owner | Encoding
-----------+-------+-----------
 postgres  | pgsql | SQL_ASCII
 template0 | pgsql | SQL_ASCII
 template1 | pgsql | SQL_ASCII
(3 rows)

Migrer un serveur

Il peut arriver qu'en plus d'installer un nouveau serveur, on doivent migrer un ancien serveur vers un nouveau.

su pgsql
pg_dumpall > all.sql

Utiliser Postgresql

La question des tablespaces

Sur les forums ou autres ressources en ligne, la question des tablespaces sous postgresql est posée et souventes fois l'on y répond que les tablespaces sous postgresql sont inutiles (puisqu'on ne peut pas y mettre de limitations). Il faut d'abord savoir que le tablespace, avant d'être une limite physique est aussi une méthode de rangement logique. Car après tout, même sous Oracle, rien n'empêche de créer une seul tablespace et de mettre toutes les tables dedans !

C'est donc avant tout l'organisation logique qui induit le tablespace. A chacun d'y voir son découpage. Par base, par type de tables...

Le tablespace peut servir aussi lorsque le disque est limité. En effet, le SGBD étant installé dans un répertoire bien précis, en cas de saturation du disque, il n'est pas capable d'étendre les données à un autre. En utilisant les tablespaces sur des répertoires montés, il est possible d'étendre le SGBD à d'autres disques sur la même machine ou, pourquoi pas, sur une machine distante.

Je vous conseille donc d'utiliser systématiquement les tablespaces. Pour éviter de disperser les répertoires, je conseille de créer dans le répertoire /usr/local/pgsql/data/ un répertoire (par exemple tablespaces) dans lequel on créera un répertoire par tablespace à utiliser. Des points de montage pourront être effectués sur ces répertoires. Par défaut, je mets systématiquement deux tablespaces : data (pour les données) et index (pour les données indexées). Chaque table qui sera créée par la suite utilisera ces tablespaces.

L'interface à choisir

Pour administrer Postgresql, il est possible d'utiliser la ligne de commande. mais cela s'avère rapidement long et fastidieux car il faut être sensibilisé au vocabulaire porstgresql. Le plus simple est d'utiliser une interface graphique, l'interface de référence étant pgadmin.

Cette interface permet d'administrer (créer des groupes, utilisateurs, droits) et de développer des BD (création de tables, d'index, de séquences, de procédures, ...).

Administrer

A l'aide de votre interface choisie (graphique ou ligne de commande), à l'aide de votre compte superutilisateur vous pouvez créer les groupes, les utilisateurs, les bases et les droits.

Postgresql est un SGBD extrêment facile à administrer. Cependant, si vous administrez votre SGBD en ligne de commande, il faudra vous reporter à la documentation pour avoir le détail des possibilités… qui sont très nombreuses.