Comment installer et utiliser PostgreSQL sur Ubuntu 22.04

De Get Docs
Aller à :navigation, rechercher

Introduction

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

PostgreSQL, ou Postgres, est un système de gestion de base de données relationnelle qui fournit une implémentation du langage d'interrogation SQL. Il est conforme aux normes et possède de nombreuses fonctionnalités avancées telles que des transactions fiables et la simultanéité sans verrous de lecture.

Ce guide montre comment installer Postgres sur un serveur Ubuntu 22.04. Il fournit également des instructions pour l'administration générale de la base de données.

Conditions préalables

Pour suivre ce didacticiel, vous aurez besoin d'un serveur Ubuntu 22.04 qui a été configuré en suivant notre guide Configuration initiale du serveur pour Ubuntu 22.04. Après avoir terminé ce didacticiel préalable, votre serveur doit avoir un utilisateur non root avec des autorisations sudo et un pare-feu de base.

Étape 1 - Installation de PostgreSQL

Les référentiels par défaut d'Ubuntu contiennent des packages Postgres, vous pouvez donc les installer en utilisant le apt système d'emballage.

Si vous ne l'avez pas fait récemment, actualisez l'index de package local de votre serveur :

sudo apt update

Ensuite, installez le package Postgres avec un -contrib package qui ajoute quelques utilitaires et fonctionnalités supplémentaires :

sudo apt install postgresql postgresql-contrib

Assurez-vous que le serveur est en cours d'exécution à l'aide du systemctl start commande:

sudo systemctl start postgresql.service

Maintenant que le logiciel est installé et en cours d'exécution, nous pouvons voir comment il fonctionne et en quoi il peut être différent des autres systèmes de gestion de bases de données relationnelles que vous avez pu utiliser.

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

Par défaut, Postgres utilise un concept appelé roles pour gérer l'authentification et l'autorisation. Ceux-ci sont, à certains égards, similaires aux comptes de style Unix classiques, mais Postgres ne fait pas de distinction entre les utilisateurs et les groupes et préfère à la place le terme plus flexible «rôle».

Lors de l'installation, Postgres est configuré pour utiliser l'authentification par les pairs, ce qui signifie qu'il associe les rôles Postgres à un compte système Unix/Linux correspondant. Si un rôle existe dans Postgres, un nom d'utilisateur Unix/Linux portant le même nom peut se connecter avec ce rôle.

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

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

Passer au compte postgres

Basculez vers le compte postgres sur votre serveur en tapant :

sudo -i -u postgres

Vous pouvez maintenant accéder immédiatement à l'invite PostgreSQL en tapant :

psql

À partir de là, vous êtes libre d'interagir avec le système de gestion de base de données si nécessaire.

Quittez l'invite PostgreSQL en tapant :

\q

Cela vous ramènera à l'invite de commande de l'utilisateur Linux postgres.

Accéder à une invite Postgres sans changer de compte

Vous pouvez également exécuter la commande que vous souhaitez avec le compte postgres directement avec sudo.

Par exemple, dans le dernier exemple, il vous a été demandé d'accéder à l'invite Postgres en passant d'abord à l'utilisateur postgres, puis en exécutant psql pour ouvrir l'invite Postgres. Vous pouvez le faire en une seule étape en exécutant la commande unique psql en tant qu'utilisateur postgres avec sudo, comme ça:

sudo -u postgres psql

Cela vous connectera directement à Postgres sans l'intermédiaire bash coquille entre les deux.

Encore une fois, vous pouvez quitter la session Postgres interactive en tapant :

\q

De nombreux cas d'utilisation nécessitent plusieurs rôles Postgres. Lisez la suite pour savoir comment les configurer.

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

Actuellement, vous avez le rôle postgres configuré dans la base de données. Vous pouvez créer de nouveaux rôles à partir de la ligne de commande avec le createuser commande. La --interactive flag vous demandera le nom du nouveau rôle et vous demandera également s'il doit avoir 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, à la place, 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 correctes pour créer un utilisateur selon vos spécifications.

OutputEnter 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 quelques drapeaux supplémentaires. Découvrez les options en regardant le man page pour la createuser commande:

man createuser

Votre installation de Postgres a maintenant un nouvel utilisateur, mais vous n'avez pas encore ajouté de bases de données. La section suivante décrit ce processus.

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

Une autre hypothèse que le système d'authentification Postgres fait par défaut est que pour tout rôle utilisé pour se connecter, ce rôle aura une base de données avec le même nom à laquelle il peut accéder.

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

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

createdb sammy

Si, à la place, vous préférez utiliser sudo pour chaque commande sans quitter votre compte normal, vous taperiez :

sudo -u postgres createdb sammy

Cette flexibilité offre plusieurs chemins pour créer des bases de données selon les besoins.

Étape 5 - Ouverture d'une invite Postgres avec le nouveau rôle

Pour vous connecter avec l'authentification par les pairs, 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 le adduser commande. Vous devrez le faire à partir de votre compte non root avec sudo privilèges (c'est-à-dire, non connecté en tant qu'utilisateur postgres) :

sudo adduser sammy

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

sudo -i -u sammy
psql

Ou, vous pouvez le faire en ligne :

sudo -u sammy psql

Cette commande vous connectera automatiquement, en supposant que tous les composants ont été correctement configurés.

Si vous souhaitez que votre utilisateur se connecte à une autre base de données, vous pouvez le faire 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
OutputYou are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

Ceci est utile si vous vous connectez à des bases de données autres que celles par défaut ou avec des utilisateurs autres que ceux par défaut.

Étape 6 - Création et suppression de tables

Maintenant que vous savez comment vous connecter au système de base de données PostgreSQL, vous pouvez apprendre certaines tâches de gestion Postgres de base.

La syntaxe de base pour créer des tables 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)
);

Cette commande donne un nom à la table, puis définit les colonnes ainsi que le type de colonne et la longueur maximale des données du champ. Vous pouvez éventuellement ajouter des contraintes pour chaque colonne.

Vous pouvez en savoir plus sur la création de tables en suivant notre guide sur Comment créer et gérer des tables en SQL.

À des fins de démonstration, créez le tableau suivant :

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 créera une table qui répertorie les équipements de jeux. La première colonne du tableau contiendra les numéros d'identification d'équipement du serial type, qui est un entier auto-incrémenté. Cette colonne a également la contrainte de PRIMARY KEY ce qui signifie que les valeurs qu'il contient doivent être uniques et non nulles.

Les deux lignes suivantes créent des colonnes pour l'équipement type et color respectivement, dont aucun ne peut être nul. La ligne après ceux-ci crée un location colonne avec une contrainte qui exige que la valeur soit l'une des huit valeurs possibles. La dernière ligne crée un date colonne qui enregistre la date à laquelle vous avez installé l'équipement.

Pour deux des colonnes (equip_id et install_date), la commande ne spécifie pas de longueur de champ. La raison en est que certains types de données ne nécessitent pas de longueur définie car la longueur ou le format est implicite.

Examinez votre nouveau tableau en tapant :

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

Votre table de jeu est ici, mais il y a aussi quelque chose qui s'appelle playground_equip_id_seq c'est du genre sequence. Il s'agit d'une représentation de la serial type que vous avez donné votre equip_id colonne. Cela garde une trace du numéro suivant dans la séquence et est créé automatiquement pour les colonnes de ce type.

Si vous souhaitez afficher uniquement le tableau sans la séquence, vous pouvez taper :

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

Avec un tableau à portée de main, utilisons-le pour nous exercer à gérer les données.

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

Maintenant que vous avez un tableau, vous pouvez y insérer des données. Par exemple, ajoutez une diapositive et une balançoire en appelant la table à laquelle vous souhaitez 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 pour éviter quelques blocages courants. D'une part, ne placez pas les noms de colonne entre guillemets, mais les valeurs de colonne que vous entrez ont besoin de guillemets.

Une autre chose à garder à l'esprit est que vous n'entrez pas de valeur pour le equip_id colonne. En effet, il est généré automatiquement chaque fois que vous ajoutez une nouvelle ligne au tableau.

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

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

Remarquez que votre equip_id a été rempli avec succès et que toutes vos autres données ont été correctement organisées.

Si la diapositive sur le terrain de jeu se casse et que vous devez la supprimer, vous pouvez également supprimer la ligne de votre tableau en tapant :

DELETE FROM playground WHERE type = 'slide';

Interrogez à nouveau la table :

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

Remarquez que le slide la ligne ne fait plus partie du tableau.

Étape 8 - Ajouter et supprimer des colonnes d'un tableau

Après avoir créé un tableau, vous pouvez le modifier en ajoutant ou en supprimant des colonnes. Ajoutez une colonne pour afficher la dernière visite de maintenance pour chaque équipement en saisissant :

ALTER TABLE playground ADD last_maint date;

Affichez à nouveau les informations de votre table. Une nouvelle colonne a été ajoutée mais aucune donnée n'a été saisie :

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

Si vous constatez que votre équipe de travail utilise un outil distinct pour suivre l'historique de maintenance, vous pouvez supprimer la colonne en saisissant :

ALTER TABLE playground DROP last_maint;

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

Étape 9 - Mise à jour des données dans un tableau

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

Vous pouvez mettre à jour les valeurs d'une entrée existante en recherchant l'enregistrement souhaité et en définissant la colonne sur la valeur que vous souhaitez utiliser. Vous pouvez interroger le swing record (cela correspondra à chaque swing de votre table) et changez sa couleur en red. Cela pourrait être utile si vous donniez un travail de peinture à la balançoire :

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

Vous pouvez vérifier que l'opération a réussi en interrogeant à nouveau les données :

SELECT * FROM playground;
Output equip_id | type  | color | location  | install_date 
----------+-------+-------+-----------+--------------
        2 | swing | red   | northwest | 2018-08-16
(1 row)

La diapositive est maintenant enregistrée comme étant rouge.

Conclusion

Vous êtes maintenant configuré avec PostgreSQL sur votre serveur Ubuntu 22.04. Si vous souhaitez en savoir plus sur Postgres et son utilisation, nous vous encourageons à consulter les guides suivants :