Comment installer et utiliser PostgreSQL sur Ubuntu 18.04

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. C'est un choix populaire pour de nombreux projets, petits et grands, qui présente l'avantage d'être conforme aux normes et de disposer de nombreuses fonctionnalités avancées telles que les transactions fiables et la simultanéité sans verrous de lecture.

Ce guide explique comment installer Postgres sur une instance VPS Ubuntu 18.04 et fournit également des instructions pour l'administration de base de données.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin d'un serveur Ubuntu 18.04 qui a été configuré en suivant notre guideInitial Server Setup for Ubuntu 18.04. Après avoir terminé ce didacticiel prérequis, votre serveur doit avoir un utilisateur non -root avec des autorisations sudo et un pare-feu de base.

[[step-1 -—- Installing-postgresql]] == É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 système d'empaquetageapt.

Puisque c'est la première fois que vous utilisezapt dans cette session, actualisez votre index de package local. Ensuite, installez le package Postgres avec un package-contrib qui ajoute quelques utilitaires et fonctionnalités supplémentaires:

sudo apt update
sudo apt install postgresql postgresql-contrib

Maintenant que le logiciel est installé, nous pouvons voir comment il fonctionne et en quoi il peut être différent des systèmes de gestion de base de données similaires que vous avez utilisés.

[[step-2 -—- using-postgresql-roles-and-databases]] == Étape 2 - Utilisation des rôles et des bases de données PostgreSQL

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

Lors de l'installation, Postgres est configuré pour utiliser l'authentificationident, 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 en tant que ce rôle.

La procédure d'installation a créé un compte utilisateur appelépostgres 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 comptepostgres sur votre serveur en tapant:

sudo -i -u postgres

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

psql

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

Quittez l'invite de PostgreSQL en tapant:

\q

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

Accéder à une invite Postgres sans changer de compte

Vous pouvez également exécuter la commande que vous souhaitez avec le comptepostgres directement avecsudo.

Par exemple, dans le dernier exemple, vous avez été invité à accéder à l'invite Postgres en passant d'abord à l'utilisateurpostgres, puis en exécutantpsql pour ouvrir l'invite Postgres. Vous pouvez le faire en une seule étape en exécutant la commande uniquepsql en tant qu'utilisateurpostgres avecsudo, comme ceci:

sudo -u postgres psql

Cela vous connectera directement à Postgres sans le shell intermédiairebashentre les deux.

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

\q

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

[[step-3 -—- creating-a-new-role]] == Étape 3 - Création d'un nouveau rôle

Actuellement, vous n'avez que le rôle depostgres configuré dans la base de données. Vous pouvez créer de nouveaux rôles à partir de la ligne de commande avec la commandecreaterole. L'indicateur--interactive 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 comptepostgres, vous pouvez créer un nouvel utilisateur en tapant:

createuser --interactive

Si, à la place, vous préférez utilisersudo pour chaque commande sans changer de compte normal, tapez:

sudo -u postgres createuser --interactive

Le script vous demandera quelques choix et, en fonction de vos réponses, exécutera les commandes Postgres appropriées pour créer un utilisateur conforme à 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 des drapeaux supplémentaires. Découvrez les options en regardant la pageman:

man createuser

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

[[step-4 -—- creation-a-new-database]] == Étape 4 - Création d'une nouvelle base de données

Une autre hypothèse que le système d'authentification Postgres pose par défaut est que, quel que soit le rôle utilisé pour la connexion, ce rôle aura une base de données portant le même nom auquel il peut accéder.

Cela signifie que si l'utilisateur que vous avez créé dans la dernière section s'appellesammy, 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 la commandecreatedb.

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

createdb sammy

Si, à la place, vous préférez utilisersudo pour chaque commande sans changer de compte normal, vous tapez:

sudo -u postgres createdb sammy

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

[[step-5 -—- opening-a-postgres-prompt-with-the-new-role]] == Étape 5 - Ouverture d'une invite Postgres avec le nouveau rôle

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

Si vous n’avez pas d’utilisateur Linux correspondant, vous pouvez en créer un avec la commandeadduser. Vous devrez le faire à partir de votre compte non -root avec les privilègessudo (c'est-à-dire non connecté en tant qu'utilisateurpostgres):

sudo adduser sammy

Une fois ce nouveau compte disponible, vous pouvez 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 suit:

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 non définies par défaut ou à des utilisateurs non définis par défaut.

[[step-6 -—- creation-and-deleting-tables]] == É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 de base Postgres.

Commencez par créer une table pour stocker des données. A titre d'exemple, un tableau décrivant certains équipements de jeux.

La syntaxe de base pour 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)
);

Comme vous pouvez le constater, ces commandes attribuent 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 éventuellement ajouter des contraintes de table pour chaque colonne.

Vous pouvez en savoir plus surhow to create and manage tables in Postgres ici.

À des fins de démonstration, créez un tableau simple comme celui-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
);

Ces commandes créeront une table qui répertorie l'équipement de terrain de jeu. Cela commence par un ID d'équipement, qui est du typeserial. Ce type de données est un entier auto-incrémenté. Vous avez également donné à cette colonne la contrainte deprimary key, ce qui signifie que les valeurs doivent être uniques et non nulles.

Pour deux des colonnes (equip_id etinstall_date), les commandes ne spécifient pas de longueur de champ. Cela est dû au fait que certains types de colonnes ne nécessitent pas de longueur définie, car la longueur est impliquée par le type.

Les deux commandes suivantes créent respectivement des colonnes pour les équipementstype etcolor, chacune ne pouvant pas être vide. La commande qui suit crée une colonnelocation et crée une contrainte qui requiert que la valeur soit l'une des huit valeurs possibles. La dernière commande crée une colonne de date qui enregistre la date d'installation de l'équipement.

Vous pouvez voir votre nouvelle table 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 appeléplayground_equip_id_seq qui est du typesequence. Ceci est une représentation du typeserial que vous avez donné à votre colonneequip_id. Ceci garde 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
Output          List of relations
 Schema |    Name    | Type  | Owner
--------+------------+-------+-------
 public | playground | table | sammy
(1 row)

[[step-7 -—- ajoutant-querying-and-deleting-data-in-a-table]] == Étape 7 - Ajout, interrogation et suppression de données dans une table

Maintenant que vous avez une table, 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 suit:

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');

Lors de la saisie des données, veillez à éviter quelques interruptions courantes. Premièrement, 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 la colonneequip_id. En effet, cela est généré automatiquement chaque fois qu'une nouvelle ligne de la table est créée.

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

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)

Ici, vous pouvez voir que votreequip_id a été rempli avec succès et que toutes vos autres données ont été organisées correctement.

Si la diapositive du terrain de jeu se brise et que vous devez la supprimer, vous pouvez également supprimer la ligne de votre table 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)

Vous remarquez que votre diapositive ne fait plus partie du tableau.

[[step-8 -—- add-and-deleting-columns-from-a-table]] == Étape 8 - Ajout et suppression de colonnes d'une table

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

ALTER TABLE playground ADD last_maint date;

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

SELECT * FROM playground;
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 maintenance, vous pouvez supprimer la colonne en tapant:

ALTER TABLE playground DROP last_maint;

Cela supprime la colonnelast_maint et toutes les valeurs qu'elle contient, mais laisse toutes les autres données intactes.

[[step-9 -—- update-data-in-a-table]] == Étape 9 - Mise à jour des données dans une table

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

Vous pouvez mettre à jour les valeurs d'une entrée existante en interrogeant l'enregistrement souhaité et en définissant la colonne sur la valeur que vous souhaitez utiliser. Vous pouvez rechercher l'enregistrement «swing» (il correspondra au swing deevery dans votre table) et changer sa couleur en «rouge». Cela pourrait être utile si vous donniez un travail de peinture à l'ensemble de 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 | 2010-08-16
(1 row)

Comme vous pouvez le constater, votre diapositive est maintenant enregistrée comme étant en rouge.