Archives de catégorie : PostgreSQL

Reconfigurer l’installation par défaut de PostgreSQL 10

Dans cet article nous reconfigurerons le serveur de base de données PostgreSQL version 10 après une installation faite lors du précédent article. Cette reconfiguration consiste essentiellement en le remplacement du cluster de bases de données installé par défaut. L’objectif est d’obtenir une installation qui convient pour une utilisation dans un environnement de développement sur une machine de bureau.

Cet article fait partie d’une série qui concerne le serveur de bases de données PostgreSQL et son utilisation dans un environnement de développement:

  1. Installation de base de PostgreSQL
  2. Utiliser Postgres pgAdmin 3 pour administrer PostgreSQL
  3. Installer PostgreSQL 10
  4. Cet article: Reconfigurer l’installation par défaut de PostgreSQL 10
  5. Utiliser PostgreSQL 10 dans un environnement de développement
  6. Administrer PostgreSQL avec psql
  7. Postgres pgAdmin 4 : installation et configuration
  8. Postgres pgAdmin 4: Utilisation courante

L’installation par défaut ne convient pas pour un environnement de développement

La première installation de PostgreSQL crée un utilisateur système: postgres. Le cluster créé lors de cette installation appartient à cet utilisateur: fichiers et droits système. Un utilisateur de base de données (BDD) de même nom: postgres, est également créé. Cet utilisateur est le super administrateur du cluster. Un accés local au serveur de base de données est configuré pour l’utilisateur système postgres. Cet accés local permet à postgres de se connecter au serveur sans authentification supplémentaire en tant qu’utilisateur BDD postgres.

Ce comportement convient à une installation sur un serveur réel. En revanche, il rend contraignant son utilisation sur une machine de développement. Le contrôle du fonctionnement du serveur, la modification de la configuration et l’accès local au serveur doivent se faire en passant par l’utilisateur système postgres. Pour une gestion plus simple du serveur, la meilleure solution est de substituer le login de l’utilisateur-développeur à postgres.

Supprimer le cluster PostgreSQL installé par défaut

Il faut arrêter le serveur s’il est démarré et supprimer le cluster créé par défaut: main. Pour cela exécuter:

sudo pg_dropcluster --stop 10 main

Créer un cluster PostgreSQL personnalisé

Si le login du développeur sur sa machine est jdupond (Pour Jean Dupond), le système lui attribue systématiquement un groupe système jdupond et un répertoire personnel: /home/jdupond. Dans /home/jdupond tout est permis pour l’utilisateur. Ceci nous amène à exécuter la commande suivante pour créer le cluster:

sudo pg_createcluster -u jdupond -g jdupond --locale=fr_FR.UTF-8 -l /home/jdupond/pgtest.log -d /home/jdupond/pgtest 10 pgtest

Cela veut dire, créer le cluster pgtest avec les paramètres:

  • Le propriétaire (fichiers, droits et utilisateur BDD d’administration) est jdupond
  • La locale qui détermine le format des données et le mode de recherche est le français de France avec encodage unicode UTF-8.
  • Le fichier de log qui est très utile pour le développement parcequ’il permet de visualiser les requêtes SQL exécutées par l’application est /home/jdupond/pgtest.log
  • Les données sont dans /home/jdupond/pgtest/ ce qui permet leur manipulation directe par l’utilisateur-développeur.

Contrôle du serveur de base de données PostgreSQL

Avec le cluster personnalisé le contrôle du serveur PostgreSQL devient faisable directement par l’utilisateur authentifié. Voici les commandes principales de contrôle avec, en commentaire (après le caractère #), la signification

pg_ctlcluster 10 pgtest start # démarrage
pg_ctlcluster 10 pgtest stop  # arrêt
pg_ctlcluster 10 pgtest status # affichage du statut marche/arrêt
pg_ctlcluster 10 pgtest reload # recharger la configuration
pg_ctlcluster 10 pgtest restart # redémarrer le serveur

Le contrôle inclu même la suppression de ce cluster. Pour cela exécuter:

pg_dropcluster --stop 10 pgtest

Faire attention, toutefois, car la suppression du cluster entraîne la suppression définitive des données qu’il gère.

Gérer les données avec l’utilitaire psql

L’utilitaire en ligne de commande psql est un client de connexion au serveur PostgreSQL. Entre autres choses, il permet à un utilisateur authentifié sur la machine serveur de se connecter à travers le socket Unix du serveur PostgreSQL sans authentification supplémentaire. La connexion se fait avec la commande du shell:

psql -d <NomDeBaseDeDonnees> 

Avec le cluster personnalisé pour jdupond, le super administrateur des bases de données est jdupond. Il peut se connecter en local à la BDD postgres créée par défaut:

psql -d postgres

Une fois connecté, on peut vérifier le statut de super administrateur de jdupond. Pour cela exécuter:

select rolname, rolsuper from pg_roles;

Le résultat de cette requête doit montrer un ‘t‘ (true) pour jdupond dans le champ rolsuper. Le champ rolsuper est un indicateur pour le profile super administrateur. On remarquera également l’absence de l’utilisateur postgres de la liste.

De la même manière il est possible à l’utilisateur-développeur, en exécutant des requêtes SQL, de créer, consulter, modifier ou supprimer tout type d’objets de bases de données: utilisateurs, bases de données, schémas, tables..

 

Installer PostgreSQL 10

La version 10 de PostgreSQL a marqué une rupture dans la politique d’évolution des numéros de versions de ce serveur de bases de données. Cet article a pour objectif de présenter une démarche concrète pour installer cette version du serveur sur un système GNU/Linux Debian ou compatible et d’expliquer les nouveaux enjeux des futures mises à jour de version.

Cet article fait partie d’une série qui concerne le serveur de bases de données PostgreSQL et son utilisation dans un environnement de développement:

  1. Installation de base de PostgreSQL
  2. Utiliser Postgres pgAdmin 3 pour administrer PostgreSQL
  3. Cet article: Installer PostgreSQL 10
  4. Reconfigurer l’installation par défaut de PostgreSQL 10
  5. Utiliser PostgreSQL 10 dans un environnement de développement
  6. Administrer PostgreSQL avec psql
  7. Postgres pgAdmin 4 : installation et configuration
  8. Postgres pgAdmin 4: Utilisation courante

Spécificité de l’installation de PostgreSQL 10

La version 10 de PostgreSQL a constitué une évolution majeur de ce serveur de bases de données objets, relationnelles et noSQL. Elle a marqué également une rupture avec la politique historique de la progression des numéros de version, spécialement en relation avec la compatibilité avec les données antérieures.

Avant la version 10 (jusqu’à la version 9.6 donc), PostgreSQL n’assurait pas la compatibilité des données quand le numéro de version mineur s’incrémente. A titre d’exemple, la version 9.6 ne peut pas et ne doit pas gérer des données créées avec la version 9.5. Ceci explique l’insertion automatique du numéro de version dans sa forme majeur.mineur dans tous les chemins qui concernent l’installation du serveur. Cette insertion permettrait de minimiser le risque de confusion entre les versions binaires vs données. Cela explique également la présence de ce format de numéro de version dans les paquets d’installation des distributions Debian et Ubuntu. Pour visualiser la version disponible pour votre système, exécuter :

sudo apt-get update
apt-cache search postgresql | egrep "^postgresql-[0-9]+(.[0-9])? "

En réponse à cette commande voici le résultat obtenu pour la dernière version stable de Debian (Le 10/03/2018 – Debian 9.3, Stretch):

postgresql-9.6 - object-relational SQL database, version 9.6 server

Cette contrainte nécessitait, si on voudrait passer à une nouvelle version, de migrer les données en passant par un format texte du dump (dump sous forme d’ordres SQL). Or, cette opération est très lente et devient vite contraignante à partir de quelques dizaines de Go de données. Dans ce cas également, un arrêt du service de l’application qui utilise le serveur, et qui peut être excessivement long, doit être envisagé.

A partir de la version 10, PostgreSQL assurera la compatibilité des données entre les versions mineurs. En d’autres termes, aucune migration de données n’est nécessaire entre les versions 10.1 et 10.2 par exemple. Ceci permettra une plus grande flexibilité pour la mise à jour du serveur. Si on sait que le passage entre la première version 9.0 stable et la 10 stable s’est fait en 7 ans, contre 10 mois entre la 9.5 et la 9.6, il est évident que le gain en terme de stabilité du format des données est substantiel. Pour cette raison, le numéro de version inclut par défaut dans les chemins d’installation du serveur ne comporte plus que le premier chiffre. C’est également le cas pour le numéro qui accompagne les paquets d’installation des distributions Debian et Ubuntu.

Versions disponibles pour le système installé

Même avec la dernière version stable du système (Debian 9.3, Stretch ou Ubuntu 16.04 LTS, Xenial au 10/03/2018), on ne dispose pas encore de la version 10 de PostgreSQL. Ceci a été vérifié avec la commande de visualisation des version disponibles exécutée précédemment. En tout cas vous n’aurez toujours pas la totalité des versions stables publiées de ce serveur.

En réalité ceci est vrai quand on ne référence que le dépôt officiel du système. Pour pouvoir accéder à l’ensemble des versions stables publiées, il faut ajouter le dépôt PostgreSQL à la liste des sources de paquets de la machine. Pour cela il faut créer un fichier de configuration de ce dépôt suivant la version installée de l’OS:

sudo vi /etc/apt/sources.list.d/postgresql-sources.list

Le contenu de ce fichier doit être pour un système Debian 9 – Stretch:

deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

Et pour un système Ubuntu 18.04 LTS – Bionic:

deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main

Bien entendu il faudra adapter le nom de code de la version du système selon le cas dans ce fichier de configuration.

Après avoir enregistré, exécuter dans l’ordre:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
apt-cache search postgresql | egrep "^postgresql-[0-9]+(.[0-9])? "

La première commande configure la clé de vérification de l’authenticité des paquets. La troisième liste les versions disponibles. En réponse à cette dernière commande, voici le résultat obtenu toujours pour la dernière version stable de Debian:

postgresql-9.6 - object-relational SQL database, version 9.6 server
postgresql-10 - object-relational SQL database, version 10 server
postgresql-9.2 - object-relational SQL database, version 9.2 server
postgresql-9.3 - object-relational SQL database, version 9.3 server
postgresql-9.4 - object-relational SQL database, version 9.4 server
postgresql-9.5 - object-relational SQL database, version 9.5 server

6 versions stables sont disponibles dont la dernière version 10. Remarquer le nouveau format du nom de paquet de la version 10.

Installation

Pour installer la dernière version stable 10, exécuter:

sudo apt-get install postgresql-10

Cette commande installe le serveur PostgreSQL ainsi que les utilitaires d’administration. La commande crée également un cluster de bases de données par défaut (ou instance de serveur) qui s’appelle ‘main’. Les principaux chemins relatifs à cette installation sont:

  • /var/lib/postgresql/10/main/: les fichiers des données.
  • /var/log/postgresql/postgresql-10-main.log: le fichier de log du cluster.
  • /etc/postgresql/10/main/: les fichiers de configuration.
  • /usr/lib/postgresql/10/: fichiers binaires du serveur, exécutables et librairies.

La locale qui est un paramètre important du cluster est positionnée selon la configuration système de la machine. Pour une machine configurée avec la locale français de France sa valeur doit être fr_FR.UTF-8. Ce paramètre conditionne principalement le format de la date, de l’heure et de la recherche textuelle. Pour vérifier cette configuration du système, exécuter:

locale

C’est la variable LANG qui est la plus importante.

Désinstallation

Pour désinstaller la version 10 du serveur PostgreSQL de votre machine, exécuter:

sudo pg_ctlcluster 10 main stop
sudo apt-get remove postgresql-10 postgresql-client-10 postgresql-client-common postgresql-common
sudo apt-get purge postgresql-10 postgresql-client-10 postgresql-client-common postgresql-common

La troisième commande nettoie les données créées par l’installation.

Postgres pgAdmin 3 pour administrer PostgreSQL

 Objectif: Postgres pgAdmin est un outils d’administration du serveur de base de données PostgreSQL. L’objectif est donc de pouvoir administrer / utiliser PostgreSQL de manière simple (dans le sens création, modification et suppression d’objets du serveur: utilisateurs, bases de données, tables…) avec cet utilitaire à interface graphique.

Cible: GNU Linux Ubuntu ou compatible, équipé d’un gestionnaire de bureau (KDE, GNOME ..)

Cet article fait partie d’une série qui concerne le serveur de bases de données PostgreSQL et son utilisation dans un environnement de développement:

  1. Installation de base de PostgreSQL
  2. Cet article: Utiliser Postgres pgAdmin 3 pour administrer PostgreSQL
  3. Installer PostgreSQL 10
  4. Reconfigurer l’installation par défaut de PostgreSQL 10
  5. Utiliser PostgreSQL 10 dans un environnement de développement
  6. Administrer PostgreSQL avec psql
  7. Postgres pgAdmin 4 : installation et configuration
  8. Postgres pgAdmin 4: Utilisation courante

1. Installer Postgres pgAdmin 3

sudo apt-get install pgadmin3

S’agissant d’une interface graphique, son icône de lancement devrait alors apparaître dans les menus du bureau.
Sous KDE par exemple : Menu K / Applications / Développement, pgAdmin III (avec une tête d’éléphant comme icône).

2. Paramétrage de base de Postgres pgAdmin

Le premier lancement de pgAdmin donne l’écran:

Postgres pgAdmin écran initial

Utiliser le menu: Fichier / Ajouter un serveur…
Postgres pgAdmin ajouter serveur

Nom: Serveur local, ne sert que pour l’affichage, choix libre.

Hôte: localhost si le serveur est installé sur la même machine que pgAdmin. Sinon adresse (IP ou DNS) de la machine distante.

Port: 5432 par défaut

Base de maintenance: postgres créée et existe par défaut

Nom utilisateuradmin Celui qui a été créée à l’installation du serveur (cf. l’article à ce sujet).

 

 

 

A la validation l’accès au serveur est disponible

Postgres pgAdmin accés serveur

On remarquera la présence de l’unique base de donnée postgres et de l’utilisateur (rôle de connexion) postgres.

Ce sont les deux objets créées par défaut lors de l’installation du serveur.

On remarquera aussi la présence de l’utilisateur admin qui a été créée après l’installation du serveur (cf. l’article à ce sujet).

 

 

 

 

 

3. Création d’une base de données

  • Se positionner sur le nœud « Base de données (1)« 
  • Clic k droit et utiliser le menu contextuel « Ajouter une base de données…« 

pgAdmin création BD
Nom: Nom significatif, unique sur le même serveur.

Propriétaire: Choisir l’utilisateur dans la liste.

Commentaire: Facultatif mais très utile pour la documentation.

 

 

 

 

 

 

 

A la validation, la base de données est créée.

Postgres pgAdmin BD créée

4. Création de tout autre objet avec Postgres pgAdmin

Le même mode de fonctionnement est, généralement,  valable pour la création de tout autre objet:

  • Se positionner sur le nœud correspondant au type de l’objet cible: schéma, table..
  • Clic k droit et utiliser le menu contextuel

Installer PostgreSQL

Objectif :  Installer le serveur de base de données relationnelles PostgreSQL afin de l’utiliser dans un environnement de développement.

Cible: Système GNU Linux Debian ou compatible, notamment Ubuntu/KUbuntu pour les machines de bureau.

Cet article fait partie d’une série qui concerne le serveur de bases de données PostgreSQL et son utilisation dans un environnement de développement:

  1. Cet article: Installation de base de PostgreSQL
  2. Utiliser Postgres pgAdmin 3 pour administrer PostgreSQL
  3. Installer PostgreSQL 10
  4. Reconfigurer l’installation par défaut de PostgreSQL 10
  5. Utiliser PostgreSQL 10 dans un environnement de développement
  6. Administrer PostgreSQL avec psql
  7. Postgres pgAdmin 4 : installation et configuration
  8. Postgres pgAdmin 4: Utilisation courante

1. Lister les versions de PostgreSQL disponibles pour votre système

apt-cache search postgresql | grep "^postgresql-[0-9].[0-9] "

2. Installer une des versions listées (par exemple postgresql-9.3)

sudo apt-get install postgresql-9.3

3. Vérifier l’installation

sudo service postgresql

On obtient un retour:

Usage: /etc/init.d/postgresql {start|stop|restart|reload|force-reload|status}

Ce retour nous renseigne sur les commandes utilisables pour contrôler le fonctionnement du serveur, notamment la commande « status » qui permet de se renseigner sur l’état de fonctionnement: online (fonctionnement) ou down (arrêt).

4. Configurer l’accès  au serveur

sudo -u postgres psql

Permet de se connecter en tant que « postgres » qui est le super administrateur du serveur par défaut. Une fois connecté créer un utilisateur avec des droits suffisants:

CREATE USER admin WITH PASSWORD 'admin' CREATEDB CREATEUSER;

Crée l’utilisateur « admin » avec le mot de passe « admin » et qui a les droits de création de bases de données et de création d’autres utilisateurs.

SELECT * FROM pg_catalog.pg_user;

Vérifie la réussite de la commande précédente, l’utilisateur « admin » doit apparaître dans la liste. Désormais, vous pouvez utiliser ce login et mot de passe pour vous connecter au serveur.

\q

Se déconnecter du serveur.