Voici quelques manipulations de base pour démarrer avec PostgreSQL. Je m’adresse à ceux qui savent ce qu’est une base, une table… et qui souhaitent prendre en main leur hébergement.
Ce tutoriel est tenu à jour régulièrement. Dernière révision : 13 août 2016.
Je n’ai utilisé PostgreSQL que sous Debian, mais j’imagine que ce que je décris ici doit s’adapter aux autres distributions sans trop de différences.
Les commandes préfixées d’un # sont à lancer en root. Les commandes préfixées d’un % sont à lancer en simple utilisateur.
On commence par installer PostgreSQL :
# apt-get install postgresql postgresql-client
Il faut ajuster les réglages de la mémoire partagée. Modifiez /etc/sysctl.d/30-postgresql-shm.conf :
# Maximum size of shared memory segment in bytes kernel.shmmax = 151798690 # Maximum total size of shared memory in pages (normally 4096 bytes) kernel.shmall = 2097152
Pour éviter de redémarrer le système, vous pouvez faire :
# sysctl -w kernel.shmmax=151798690
# sysctl -w kernel.shmall=2097152
# service postgresql restart
Si vous faites tourner PostgreSQL dans un conteneur OpenVZ, il faut éditer le fichier /etc/vz/conf/1XX.conf correspondant au conteneur, pour changer ces paramètres :
KMEMSIZE="unlimited" LOCKEDPAGES="unlimited" PRIVVMPAGES="unlimited" SHMPAGES="unlimited" OOMGUARPAGES="unlimited"
La compatibilité du format de cluster n’est pas garantie d’une version de PostgreSQL à l’autre, et lors des mises à jour les clusters ne sont pas convertis. Il faut le faire manuellement.
Voici les commandes pour passer de la version de wheezy (9.1) à celle de jessie (9.4) :
# pg_dropcluster 9.4 main --stop
# pg_upgradecluster 9.1 main
# service postgresql restart
Mais je vous recommande de lire /usr/share/doc/postgresql-common/README.Debian.gz et la manpage de pg_upgradecluster pour comprendre ce que vous faites. Et, bien entendu, faites une sauvegarde de vos bases avant toute opération de maintenance.
Pour les manipulations en ligne de commande, éditez /etc/postgresql/X.Y/main/pg_hba.conf, commentez la ligne déjà présente pour l’utilisateur postgres, et insérez cette ligne à la place :
local all postgres trust
Puis redémarrez PostgreSQL :
# service postgresql restart
Une fois que vous aurez fini vos manipulations, il faudra annuler ce changement.
Pour changer le mot de passe d’un rôle :
# psql -U postgres
psql (version)
Saisissez « help » pour l'aide.
postgres=# ALTER USER '_Nom_rôle_' PASSWORD '_Nouveau_mdp_';
Pour changer le nom d’un rôle :
# psql -U postgres
postgres=# ALTER USER '_Nom_rôle_' RENAME TO '_Nouveau_nom_';
Pour créer un rôle admin :
# su postgres -c "createuser -s -d -r -P -E _Nom_rôle_"
Pour supprimer un rôle :
# psql -U postgres
postgres=# DROP ROLE '_Nom_rôle_';
Pour changer le rôle auquel une base appartient :
# psql -U postgres
postgres=# ALTER DATABASE '_Nom_base_' OWNER TO '_Nom_rôle_';
J’ai installé phpBB pour une association. Comme le serveur était bien chargé, j’ai préféré éviter le classique MySQL : il n’était pas installé, alors que PostgreSQL était déjà là. Voilà quelques manips que j’ai eu à faire.
Il faut ajouter la ligne suivante dans /etc/postgresql/X.Y/main/pg_hba.conf :
local phpbb3 phpbb3 md5
Cette ligne doit être placée avant la ligne décrivant la méthode de connexion (md5, ou ident, ou trust…) employée par défaut pour un type de connexion (local, ou host, ou hostssl…). C’est-à-dire pour tous les utilisateurs qui n’ont pas été mentionnés dans les lignes précédentes. Si ce passage n’est pas clair, référez-vous à /usr/share/doc/phpbb3/README.postgresql et aux commentaires au début du fichier /etc/postgresql/X.Y/main/pg_hba.conf.
Pour les mises à jour du paquet phpbb3, il faut modifier le shell de l’utilisateur système postgres, à cause d’un bug dans dbconfig-common. Avant de lancer apt-get, éditez /etc/passwd pour mettre « /bin/sh » à la place de « /bin/false ». Une fois la mise à jour terminée, annulez ce changement.