Introduction

Les systèmes de gestion de bases de données relationnelles sont un élément clé de nombreux sites web et applications. Ils offrent un moyen structuré de stocker les informations, de les organiser et d'y accéder.

PostgreSQL, également connu sous le nom de Postgres, est un système de gestion de base de données relationnelle qui fournit une implémentation du langage de requête structuré, mieux connu sous le nom de SQL. Il est utilisé par de nombreux projets populaires, grands et petits, est conforme aux normes et dispose de nombreuses fonctionnalités avancées, telles que des transactions fiables et une simultanéité sans serrures en lecture. 

En suivant ce guide, vous installerez la dernière version de PostgreSQL sur un serveur CentOS 8.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin d'un serveur fonctionnant sous CentOS 8. Ce serveur devra avoir un utilisateur non root avec des privilèges administratifs et un pare-feu configuré avec firewalld. Pour le mettre en place, suivez notre Guide de configuration initiale du serveur pour CentOS 8.

Étape 1 - Installation de PostgreSQL

PostgreSQL est disponible sur l’AppStream par défaut de CentOS 8 et il existe plusieurs versions que vous pouvez installer. Vous pouvez choisir entre ces versions en activant la collection appropriée de paquets et de dépendances qui s'alignent sur la version que vous voulez installer, chaque collection étant appelée module stream. 

Dans DNF, le gestionnaire de paquets par défaut de CentOS 8, les modules sont des collections spéciales de paquets RPM qui, ensemble, constituent une application plus importante. L'objectif est de rendre l'installation des paquets et de leurs dépendances plus intuitive pour les utilisateurs.

Listez les flux disponibles pour le module postgresql en utilisant la commande dnf :

  • dnf module list postgresql
Output
postgresql 9.6 client, server [d] PostgreSQL server and client module postgresql 10 [d] client, server [d] PostgreSQL server and client module postgresql 12 client, server PostgreSQL server and client module

Vous pouvez voir dans cette sortie qu'il existe trois versions de PostgreSQL disponibles sur le site de dépôt AppStream : 9.6, 10, et 12. Le flux qui fournit la version 10 de Postgres est le flux par défaut, comme l'indique le [d] qui le suit. Si vous souhaitez installer cette version, il vous suffit d'exécuter sudo dnf install postgresql-server et de passer à l'étape suivante. Cependant, même si la version 10 est toujours maintenue, ce tutoriel installera la version 12 de Postgres, la dernière version en date au moment de la rédaction de ce document.

Pour installer PostgreSQL version 12, vous devez activer le flux de modules de cette version. Lorsque vous activez un flux de modules, vous remplacez le flux par défaut et rendez tous les paquets liés au flux activé disponibles sur le système. Notez qu'un seul flux de tout module donné peut être activé sur un système en même temps.

Pour activer le flux de modules pour la version 12 de Postgres, exécutez la commande suivante :

  • sudo dnf module enable postgresql:12

Lorsque vous y êtes invité, appuyez sur y et ensuite ENTER pour confirmer que vous voulez activer le flux : 

Output
==================================================================== Package Architecture Version Repository Size ==================================================================== Enabling module streams: postgresql 12 Transaction Summary ==================================================================== Is this ok [y/N]: y

Après avoir activé le flux du module de la version 12, vous pouvez installer le postgresql-server pour installer PostgreSQL 12 et toutes ses dépendances : 

  • sudo dnf install postgresql-server

A l'invite, confirmez l'installation en appuyant sur y puis sur ENTER (ENTRÉE) :

Output
. . . Install 4 Packages Total download size: 16 M Installed size: 62 M Is this ok [y/N]: y

Maintenant que le logiciel est installé, vous allez effectuer quelques étapes d'initialisation pour préparer un nouveau cluster de base de données pour PostgreSQL.

Étape 2 - Création d'un nouveau cluster de bases de données PostgreSQL

Vous devez créer un nouveau cluster de base de données PostgreSQL avant de pouvoir commencer à créer des tables et à les charger avec des données. Un cluster de bases de données est un ensemble de bases de données gérées par une seule instance de serveur. La création d'un cluster de base de données consiste à créer les répertoires dans lesquels les données de la base de données seront placées, à générer les tables de catalogue partagées et à créer le template1 et les bases de données postgres.

La base de données template1 est une sorte de modèle utilisé pour créer de nouvelles bases de données ; tout ce qui est stocké dans template1,même les objets que vous ajoutez vous-même seront placés dans de nouvelles bases de données lors de leur création. La base de données postgres est une base de données par défaut conçue pour être utilisée par les utilisateurs, les services publics et les applications tierces.

Le paquet Postgres que nous avons installé à l'étape précédente est accompagné d'un script pratique appelé postgresql-setup qui aide à l'administration des clusters de bases de données de bas niveau. Pour créer un cluster de base de données, exécutez le script en utilisant sudo et avec l'option --initdb :

  • sudo postgresql-setup --initdb

Vous verrez le résultat suivant :

Output
* Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Démarrez maintenant le service PostgreSQL en utilisant systemctl : 

  • sudo systemctl start postgresql

Ensuite, utilisez une fois de plus systemctl pour permettre au service de démarrer à chaque fois que le serveur démarre :

  • sudo systemctl enable postgresql

Cela donnera le résultat suivant :

Output
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.

Maintenant que PostgreSQL est opérationnel, nous allons passer en revue l'utilisation des rôles pour apprendre comment fonctionne Postgres et en quoi il est différent des systèmes de gestion de bases de données similaires que vous avez pu utiliser par le passé.

Étape 3 - Utilisation des rôles et bases de données PostgreSQL

PostgreSQL utilise un concept appelé « rôles » pour gérer l'authentification et l'autorisation des clients. Ceux-ci sont en quelque sorte similaires aux comptes réguliers de type Unix, mais Postgres ne fait pas de distinction entre les utilisateurs et les groupes et préfère plutôt le terme plus souple de « rôle ».

Une fois installé, Postgres est configuré pour utiliser l'authentification ident, ce qui signifie qu'il associe les rôles Postgres à un compte système Unix/Linux correspondant. Si un rôle existe au sein de Postgres, un nom d'utilisateur Unix/Linux portant le même nom peut se connecter à ce rôle.

La procédure d'installation a créé un compte utilisateur nommé postgres qui est associé au rôle Postgres par défaut. Pour utiliser PostgreSQL, vous pouvez vous connecter à ce compte.

Il existe plusieurs façons d'utiliser ce compte pour accéder à l'invite PostgreSQL.

Basculer sur le compte postgres

Basculez sur le compte postgres sur votre serveur en tapant :

  • sudo -i -u postgres

Vous pouvez maintenant accéder immédiatement à une invite Postgres en tapant :

  • psql

Cela vous permettra de vous connecter à l'invite PostgreSQL, et de là, vous serez libre d'interagir immédiatement avec le système de gestion de la base de données.

Sortez de l'invite PostgreSQL en tapant :

  • \q

Cela vous ramènera à la l'invite de commande Linux du compte postgres. Revenez ensuite à votre compte d'origine avec ce qui suit :

  • exit

Accéder à une invite Postgres sans changer de compte

Vous pouvez également exécuter des commandes avec le comptepostgres directement en utilisant sudo. 

Par exemple, dans l'exemple précédent, on vous a demandé d'accéder à l'invite de Postgres en passant d'abord à l'écran postgres user et ensuite de lancer psql pour ouvrir l'invite de Postgres. Vous pouvez faire cela en une seule étape en exécutant la commande unique psql en tant qu'utilisateur postgres avec privilèges sudo, comme ceci :

  • sudo -u postgres psql

Cela vous permettra de vous connecter directement à Postgres sans passer par le bash shell intermédiaire.

Là encore, vous pouvez quitter la session Postgres interactive en tapant :

  • \q

Dans cette étape, vous avez utilisé le compte postgres pour accéder à l'invite psql. Mais de nombreux cas d'utilisation nécessitent plusieurs rôles Postgres. Lisez ce qui suit pour savoir comment configurer de nouveaux rôles.

Étape 4 - Création d'un nouveau rôle

Actuellement, le rôle postgres est le seul à être configuré dans la base de données. Vous pouvez créer de nouveaux rôles à partir de la ligne de commande avec la commande createrole. L'indicateur --interactive vous invitera à indiquer le nom du nouveau rôle et vous demandera également si celui-ci doit disposer des autorisations de superutilisateur.

Si vous êtes connecté en tant que compte postgres, vous pouvez créer un nouvel utilisateur en tapant :

  • createuser --interactive

Si, au contraire, vous préférez utiliser sudo pour chaque commande sans quitter votre compte normal, tapez :

  • sudo -u postgres createuser --interactive

Le script vous proposera quelques choix et, en fonction de vos réponses, exécutera les commandes Postgres nécessaires pour créer un utilisateur selon vos spécifications. Pour ce tutoriel, créez un rôle nommé sammy et donnez-lui des privilèges de super-utilisateur en entrant y lorsque cela est nécessaire :

Output
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

Vous pouvez obtenir plus de contrôle en passant des indicateurs supplémentaires. Consultez les options en consultant la page de manuel de create user: 

  • man createuser

Votre installation de Postgres a maintenant un nouveau rôle, mais vous n'avez encore ajouté aucune base de données. La section suivante décrit ce processus.

Étape 5 - Création d'une nouvelle base de données

Une autre hypothèse posée par défaut par le système d'authentification Postgres est que tout rôle utilisé pour se connecter disposera d'une base de données du même nom à laquelle il pourra accéder.

Cela signifie que si l'utilisateur que vous avez créé dans la dernière section est appelé sammy, ce rôle tentera de se connecter à une base de données qui est également appelée sammy par défaut. Vous pouvez créer une telle base de données avec la commande createdb.

Si vous êtes connecté en tant que compte postgres, vous devez taper quelque chose comme :

  • createdb sammy

Si, au contraire, vous préférez utiliser sudo pour chaque commande sans quitter votre compte normal, vous devez taper :

  • sudo -u postgres createdb sammy

Cette flexibilité offre de multiples façons de créer des bases de données au besoin.

Maintenant que vous avez créé une nouvelle base de données, vous allez vous y connecter avec votre nouveau rôle.

Étape 6 - Ouvrir une invite Postgres avec le nouveau rôle

Pour vous connecter avec une authentification basée sur l'identité, vous aurez besoin d'un utilisateur Linux portant le même nom que votre rôle et votre base de données Postgres.

Si vous n'avez pas d'utilisateur Linux correspondant disponible, vous pouvez en créer un avec la commande adduser. Vous devrez le faire à partir de votre compte non root avec privilèges sudo (c'est-à-dire sans être connecté en tant qu'utilisateur postgres) :

  • sudo adduser sammy

Une fois ce nouveau compte disponible, vous pouvez basculer sur ce dernier et vous connecter à la base de données en tapant :

  • sudo -i -u sammy
  • psql

Ou alors, vous pouvez le faire en ligne :

  • sudo -u sammy psql

Cette commande vous permettra de vous connecter automatiquement.

Si vous souhaitez que votre utilisateur se connecte à une autre base de données, vous pouvez le faire en incluant le drapeau -d et en spécifiant la base de données, comme ceci : 

  • psql -d postgres

Une fois connecté, vous pouvez vérifier vos informations de connexion actuelles en tapant :

  • \conninfo

Cela donnera le résultat suivant :

Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

Cette commande est utile si vous vous connectez à des bases de données qui ne sont pas celles par défaut ou avec des utilisateurs qui ne sont pas ceux par défaut.

Après vous être connecté à votre base de données, vous pouvez maintenant essayer de créer et de supprimer des tables.

Étape 7 - Créer et supprimer des tables

Maintenant que vous savez comment vous connecter au système de base de données PostgreSQL, il est temps de découvrir quelques tâches de gestion basiques de Postgres.

Tout d'abord, créez une table pour stocker certaines données. Par exemple, vous allez créer une table qui décrit certains équipements d'une aire de jeux.

La syntaxe de base de cette commande est la suivante :

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

Ces commandes donnent un nom à la table, puis définissent les colonnes ainsi que le type de colonne et la longueur maximale des données du champ. Vous pouvez également ajouter des contraintes de table pour chaque colonne.

À des fins de démonstration, créez une simple table comme celle-ci :

  • CREATE TABLE playground (
  • equip_id serial PRIMARY KEY,
  • type varchar (50) NOT NULL,
  • color varchar (25) NOT NULL,
  • location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  • install_date date
  • );

Cette commande permet de créer une table d'inventaire des équipements de terrain de jeu. Elle commence par une identification de l'équipement, qui est de type série. Ce type de données est un entier auto-incrémenté. Vous avez également donné à cette colonne la contrainte de CLÉ PRIMAIRE ce qui signifie que les valeurs doivent être uniques et non nulles. 

Pour deux des colonnes (equip_id et install_date), la commande ne spécifie pas de longueur de champ. En effet, certains types de colonnes n'ont pas besoin d'une longueur fixe car la longueur est déduite du type.

Les deux lignes suivantes créent des colonnes pour l'équipement respectivement le type et color, chacune ne pouvant pas être vide. La ligne après ceux-ci crée une colonne location et une contrainte qui requiert que la valeur soit l'une des huit valeurs possibles. La dernière ligne crée une colonne de date qui enregistre la date à laquelle vous avez installé l'équipement.

Vous pouvez voir votre nouvelle table en tapant :

  • \d

Cela donnera le résultat suivant :

Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

Votre table « playground » est là, mais il y a aussi un élément nommé playground_equip_id_seq qui est du type sequence. Il s'agit d'une représentation du type de série que vous avez donné à votre colonne equip_id. Ceci permet de garder une trace du prochain numéro de la séquence et est créé automatiquement pour les colonnes de ce type.

Si vous voulez voir uniquement la table sans la séquence, vous pouvez taper :

  • \dt

Il en résultera ce qui suit :

Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

Dans cette étape, vous avez créé un exemple de table. Dans l'étape suivante, vous allez essayer d'ajouter, d'interroger et de supprimer des entrées dans cette table.

Étape 8 - Ajouter, interroger et supprimer des données dans une table

Maintenant que vous avez une table, vous pouvez y insérer quelques données.

Par exemple, ajoutez une diapositive et une balançoire en appelant la table à laquelle vous voulez ajouter, en nommant les colonnes, puis en fournissant des données pour chaque colonne, comme ceci :

  • INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  • INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

Vous devez faire attention lors de la saisie des données afin d'éviter quelques problèmes courants. Pour commencer, les noms des colonnes ne doivent pas être mis entre guillemets, mais les valeurs des colonnes que vous saisissez doivent l'être.

Une autre chose à garder à l'esprit est que vous n'entrez pas de valeur pour la colonne equip_id. En effet, il est généré automatiquement chaque fois qu'une nouvelle ligne est créée dans la table.

Récupérez les informations que vous avez ajoutées en tapant :

  • SELECT * FROM playground;

Vous verrez le résultat suivant :

Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

Ici, vous pouvez voir que votre equip_id a bien été renseigné et que toutes vos autres données ont été organisées correctement.

Si le toboggan de l'aire de jeu se casse et que vous devez l'enlever, vous pouvez également enlever la ligne de votre table en tapant :

  • DELETE FROM playground WHERE type = 'slide';

Interrogez à nouveau la table :

  • SELECT * FROM playground;

Vous verrez ce qui suit :

Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

Remarquez que votre diapositive ne fait plus partie de la table.

Maintenant que vous avez ajouté et supprimé des entrées dans votre table, vous pouvez essayer d'ajouter et de supprimer des colonnes.

Étape 9 - Ajouter et supprimer des colonnes d'une table

Après avoir créé une table, vous pouvez la modifier pour ajouter ou supprimer des colonnes. Ajoutez une colonne pour indiquer la dernière visite de maintenance pour chaque équipement en tapant :

  • ALTER TABLE playground ADD last_maint date;

Si vous affichez à nouveau les informations de votre table, vous verrez que la nouvelle colonne a été ajoutée (mais qu'aucune donnée n'a été saisie) :

  • SELECT * FROM playground;

Vous verrez ce qui suit :

Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

La suppression d'une colonne est tout aussi simple. Si vous constatez que votre équipe de travail utilise un outil distinct pour suivre l'historique de la maintenance, vous pouvez supprimer la colonne en tapant :

  • ALTER TABLE playground DROP last_maint;

Cela supprime la colonne last_maint et toutes les valeurs qui s'y trouvent, mais laisse toutes les autres données intactes.

Maintenant que vous avez ajouté et supprimé des colonnes, vous pouvez essayer de mettre à jour les données existantes lors de la dernière étape.

Étape 10 - Mise à à jour les données dans une table

Jusqu'à présent, vous avez appris comment ajouter des enregistrements à une table et comment les supprimer, mais ce tutoriel n'a pas encore évoqué comment modifier des entrées existantes.

Vous pouvez mettre à jour les valeurs d'une entrée existante en interrogeant l'enregistrement que vous souhaitez et en paramétrant la colonne sur la valeur que vous souhaitez utiliser. Vous pouvez interroger l'enregistrement swing (balançoire) ; cela correspondra à chaque balançoire de votre table et changera sa couleur en rouge :

  • UPDATE playground SET color = 'red' WHERE type = 'swing';

Vous pouvez vérifier que l'opération a réussi en effectuant une nouvelle requête :

  • SELECT * FROM playground;

Vous verrez ce qui suit :

Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2010-08-16 (1 row)

Comme vous pouvez le voir, votre balançoire est maintenant enregistrée comme étant rouge.

Conclusion

Vous êtes maintenant paramétré avec PostgreSQL sur votre serveur CentOS 8. Cependant, il y a encore beaucoup de choses à découvrir sur Postgres. Voici d'autres guides sur l'utilisation de Postgres :

0 Comments

Creative Commons License