Académique Documents
Professionnel Documents
Culture Documents
M. KONATE Ibrahima
1
SOMMAIRE
1. Introduction ....................................................................................................................................... 3
1.1 Installation et configuration de POSTGRESQL ........................................................................... 3
1.2 PostgreSQL ................................................................................................................................ 3
2. Gestion de bases de données............................................................................................................ 3
2.1 Création de bases de données .................................................................................................. 3
2.2 Modification de la base de données ....................................................................................... 10
2.3 Renommage de la base de données........................................................................................ 14
2.4 Suppression de la base de données ........................................................................................ 15
2.5 Copie d’une base de données ................................................................................................. 18
2.6 Obtenir la taille des objets de la base des données ...................................................................... 21
3. Gestion des schémas (Schema) ....................................................................................................... 27
3.1 Schéma .......................................................................................................................................... 27
3.2 Création d’un Schéma ................................................................................................................... 33
3.3 Modification d’un Schéma............................................................................................................. 36
3.4 Suppression d’un Schéma ............................................................................................................. 39
4. Gestion des tablespaces ...................................................................................................................... 43
4.1 Création des tablespaces ............................................................................................................... 43
5. Rôles et Privilèges ................................................................................................................................ 49
5.1 Création d’un rôle .......................................................................................................................... 49
5.2 Octroyer des privilèges .................................................................................................................. 54
5.3 Retirer des privilèges ..................................................................................................................... 57
5.4 Modification d’un rôle ................................................................................................................... 59
5.5 Suppression d’un rôle .................................................................................................................... 63
5.6 Groupe de rôle............................................................................................................................... 67
5.7 Liste des rôles ................................................................................................................................ 72
6. Sauvegarde & Restauration ................................................................................................................. 74
6.1 Sauvegarde de la base de données ............................................................................................... 74
6.2 Restauration de la base de données ............................................................................................. 77
7. Conseils pour bien administrer la base de données............................................................................ 79
2
1. Introduction
1.2 PostgreSQL
3
CREATE DATABASE database_name
WITH
[OWNER = role_name]
[TEMPLATE = template]
[ENCODING = encoding]
[LC_COLLATE = collate]
[LC_CTYPE = ctype]
[TABLESPACE = tablespace_name]
4
utilise la base de données template1 comme base de modèles si
vous ne spécifiez pas explicitement la base de données modèle.
ENCODING
Déterminez l’encodage du jeu de caractères dans la nouvelle base
de données.
LC_COLLATE
Spécifier l’ordre de collationnement (LC_COLLATE) que la nouvelle
base utilisera. Ce paramètre affecte l’ordre de tri de la chaîne
dans les requêtes qui contiennent la clause ORDER BY. Par défaut,
il s’agit du LC_COLLATE de la base modèle.
LC_CTYPE
Précisez la classification des caractères que la nouvelle base de
données utilisera. Elle influe sur la classification des
caractères, p. ex., inférieur, supérieur et numérique. Il est par
défaut LC_CTYPE de la base modèle
TABLESPACE
Spécifiez le nom du tablespace pour la nouvelle base de données.
La valeur par défaut est le tablespace de la base modèle.
CONNECTION LIMIT
Spécifiez le nombre maximum de connexions simultanées à la
nouvelle base de données. La valeur par défaut est -1 soit
illimitée. Ce paramètre est utile dans les environnements
d’hébergement partagé où vous pouvez configurer le maximum de
connexions simultanées pour une base de données particulière.
ALLOW_CONNECTIONS
Le paramètre allow_connections est une valeur booléenne. S’il est
faux, vous ne pouvez pas vous connecter à la base de données.
IS_TEMPLATE
Si le IS_TEMPLATE est vrai, tout utilisateur disposant du
privilège CREATEDB peut le cloner. Si faux, seuls les super
utilisateurs ou le propriétaire de la base de données peuvent le
cloner.
a) Créer une base de données avec les paramètres par défaut
Tout d’abord, connectez-vous à PostgreSQL en utilisant n’importe
quel outil client.
5
Deuxièmement, exécutez l’instruction suivante dans une nouvelle
base de données avec les paramètres par défaut :
\l
CREATE DATABASE hr
WITH
ENCODING = 'UTF8'
OWNER = hr
6
Ensuite, cliquez avec le bouton droit sur le nœud Bases de
données et sélectionnez Créer > Base de données… élément de menu
7
Quatrièmement, sélectionnez l’onglet Définition pour définir les
propriétés de la base de données :
8
Enfin, cliquez sur le bouton Enregistrer pour créer la base de
données sampledb. Vous verrez la base de données sampledb dans la
liste :
9
Résumé :
Utilisez l’instruction CREATE DATABASE pour créer une nouvelle
base de données.
10
• IS_TEMPLATE
• CONNECTION LIMIT
• ALLOW_CONNECTIONS
Notez que seuls les super utilisateurs ou les propriétaires de
bases de données peuvent modifier ces paramètres.
RENAME TO new_name;
11
ALTER DATABASE database_name
RENAME TO testhrdb;
12
Troisièmement, exécutez l’instruction suivante pour changer le
propriétaire de la base de données testhrdb de postgresto hr, en
supposant que le rôle hr existe déjà.
ALTER DATABASE testhrdb
OWNER TO hr;
CREATE ROLE hr
LOGIN
CREATEDB
PASSWORD 'securePa$$1';
OWNER hr
LOCATION 'C:\\sampledb\\hr';
13
2.3 Renommage de la base de données
Pour renommer une base de données PostgreSQL, procédez comme
suit :
Déconnectez-vous de la base de données que vous souhaitez
renommer et connectez-vous à une autre base de données.
Vérifiez et terminez toutes les connexions actives à la base de
données que vous souhaitez renommer.
Utilisez l’instruction ALTER DATABASE pour renommer la base de
données.
Prenons un exemple de renommage d’une base de données.
L’instruction suivante crée une nouvelle base de données appelée
db :
14
Puis, terminez toutes les connexions à la base de données db en
utilisant l’instruction suivante :
SELECT
pg_terminate_backend (pid)
FROM
pg_stat_activity
WHERE
datname = 'db';
15
Seuls les super utilisateurs et le propriétaire de la base de
données peuvent exécuter l’instruction DROP DATABASE. En outre,
vous ne pouvez pas exécuter l’instruction DROP DATABASE si la
base de données a toujours des connexions actives. Dans ce cas,
vous devez vous déconnecter de la base de données et vous
connecter à une autre base de données, par exemple, postgres pour
exécuter l’instruction DROP DATABASE.
PostgreSQL fournit également un utilitaire nommé dropdbqui vous
permet de supprimer une base de données. Le programme dropdb
exécute l’instruction DROP DATABASE en coulisses.
SELECT *
FROM pg_stat_activity
FROM pg_stat_activity
Remarque :
Notez que si vous utilisez PostgreSQL version 9.1 ou antérieure,
utilisez la procpidcolumn à la place de la pidcolumn car
PostgreSQL a changé procidcolumn en pidcolumn depuis la version
9.2
Troisièmement, exécutez l’instruction DROP DATABASE :
16
Exemples de base de données PostgreSQL DROP :
Nous utiliserons les bases de données créées dans la partie
PostgreSQL create database pour la démonstration.
Si vous n’avez pas encore créé cette base de données, vous pouvez
utiliser les instructions CREATE DATABASE suivantes pour les
créer :
17
SELECT *
FROM pg_stat_activity
pg_terminate_backend (pg_stat_activity.pid)
FROM
pg_stat_activity
WHERE
pg_stat_activity.datname = 'testdb1';
18
Parfois, vous souhaitez copier une base de données PostgreSQL
dans un serveur de base de données à des fins de test.
PostgreSQL permet de le faire facilement via l’instruction CREATE
DATABASE comme suit :
19
Pour detruire les connexions actives à la base de données
dvdrental, vous utilisez la requête suivante :
20
Deuxièmement, copiez le fichier dump sur le serveur distant.
Troisièmement, créer la base de données dvdrental sur le serveur
distant :
CREATE DATABASE dvdrental;
Dans cette partie, vous avez appris à copier une base de données
PostgreSQL dans un serveur de base de données, ou d’un serveur de
base de données à un autre.
select pg_relation_size('actor');
pg_relation_size
------------------
16384
21
Pour rendre le résultat plus lisible, vous utilisez la fonction
pg_size_pretty(). La fonction pg_size_pretty() prend le résultat
d’une autre fonction et la formate en utilisant des octets, kB,
MB, GB ou TB selon le cas. Par exemple :
pg_size_pretty
----------------
16 kB
(1 row)
SELECT
pg_size_pretty (
pg_total_relation_size ('actor')
);
----------------
72 kB
(1 row)
22
Par exemple, la requête suivante retourne les 5 plus grandes tables
de la base de données dvdrental :
SELECT
relname AS "relation",
pg_size_pretty (
pg_total_relation_size (C .oid)
) AS "total_size"
FROM
pg_class C
WHERE
nspname NOT IN (
'pg_catalog',
'information_schema'
ORDER BY
LIMIT 5;
23
Voici la sortie :
relation | total_size
------------+------------
rental | 2472 kB
payment | 2232 kB
film | 688 kB
film_actor | 536 kB
inventory | 464 kB
(5 rows)
pg_size_pretty
----------------
15 MB
(1 row)
SELECT
pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database;
24
datname | size
----------------+---------
postgres | 7055 kB
template1 | 7055 kB
template0 | 6945 kB
dvdrental | 15 MB
Voici la sortie :
pg_size_pretty
----------------
32 kB
(1 row)
pg_size_pretty (
pg_tablespace_size ('pg_default')
);
25
La syntaxe renvoie le résultat suivant :
pg_size_pretty
----------------
43 MB
(1 row)
pg_column_size
----------------
(1 row)
select pg_column_size(5::int);
pg_column_size
----------------
(1 row)
select pg_column_size(5::bigint);
pg_column_size
----------------
(1 row)
26
3. Gestion des schémas (Schema)
3.1 Schéma
schema_name.object_name
public.staff
Ou :
sales.staff
27
créez sans spécifier le nom du schéma, PostgreSQL le placera dans
ce schéma public. Par conséquent, les syntaxes suivantes sont
équivalentes :
...
);
Et
...
);
SELECT current_schema();
Voici la sortie :
28
current_schema
----------------
public
(1 row)
-----------------
"$user", public
(1 row)
29
Maintenant, si vous créez une nouvelle table nommée staff sans
spécifier le nom du schéma, PostgreSQL mettra cette table dans le
schéma de vente :
);
30
Pour accéder à la table du personnel dans le schéma de vente,
vous pouvez utiliser l’un des syntaxes suivantes :
Ou :
31
Le schéma public est le deuxième élément du chemin de recherche,
donc pour accéder à la table de portée dans le schéma public,
vous devez qualifier le nom de la table comme suit :
TO role_name;
TO user_name;
32
Notez que, par défaut, chaque utilisateur a le CREATE et USAGE
sur le schéma public.
Opérations de schéma PostgreSQL
Pour créer un nouveau schéma, vous utilisez l’instruction CREATE
SCHEMA.
Pour renommer un schéma ou changer son propriétaire, vous
utilisez l’instruction ALTER SCHEMA.
Pour supprimer un schéma, vous utilisez l’instruction DROP
SCHEMA.
Dans cette partie, vous avez appris comment PostgreSQL utilise le
chemin de recherche pour résoudre les noms d’objets.
33
CREATE SCHEMA [IF NOT EXISTS] AUTHORIZATION username;
34
b) Utiliser CREATE SCHEMA pour créer un schéma pour un exemple
utilisateur
Tout d’abord, créez un nouveau rôle avec le nom john :
CREATE ROLE john
LOGIN
PASSWORD 'Postgr@s321!';
35
CREATE SCHEMA scm
FROM deliveries
36
Tout d’abord, spécifiez le nom du schéma auquel vous voulez
changer le propriétaire dans la clause ALTER SCHEMA.
Deuxièmement, précisez le nouveau propriétaire dans la clause
OWNER TO.
Exemples d’instructions PostgreSQL ALTER SCHEMA
Prenons quelques exemples d’utilisation de l’instruction ALTER
SCHEMA pour mieux comprendre.
37
SELECT *
FROM
pg_catalog.pg_namespace
WHERE
nspacl is NULL AND
nspname NOT LIKE 'pg_%'
ORDER BY
nspname;
Le resultat :
38
3.4 Suppression d’un Schéma
Le DROP SCHEMA supprime un schéma et tous ses objets d’une base
de données. Ce qui suit illustre la syntaxe de l’instruction DROP
SCHEMA :
dessin
DROP SCHEMA [IF EXISTS] schema_name
[ CASCADE | RESTRICT ];
39
a) Utiliser l’instruction DROP SCHEMA pour supprimer un exemple
de schéma vide
Cet exemple utilise l’instruction DROP SCHEMA pour supprimer le
schéma comptable :
40
b) Utilisation de l’instruction DROP SCHEMA pour supprimer des
exemples de schémas multiples
L’exemple suivant utilise l’instruction DROP SCHEMA pour
supprimer plusieurs schémas finance et marketing en utilisant une
seule instruction :
41
Cette instruction supprime le schéma scm :
DROP dessin
SCHEMA scm;
Voici les messages :
ERROR: cannot drop schema scm because other objects
depend on it
DETAIL: table scm.deliveries depends on schema scm
view scm.delivery_due_list depends on schema scm
HINT: Use DROP ... CASCADE to drop the dependent objects
too.
SQL state: 2BP01
42
Dans cette partie, vous avez appris à utiliser la syntaxe
PostgreSQL DROP SCHEMA
43
appareils à semi-conducteurs, et mettre les tables contenant des
données d’archive qui est rarement utilisé sur des appareils plus
lents.
PostgreSQL CREATE TABLESPACE
Pour créer de nouveaux tablespaces, utilisez l’instruction CREATE
TABLESPACE comme suit :
Le nom du tablespace ne doit pas commencer par pg_, car ces noms
sont réservés aux tablespaces du système.
Par défaut, l’utilisateur qui exécute CREATE TABLESPACE est le
propriétaire du tablespace. Pour affecter un autre utilisateur
comme propriétaire du tablespace, vous le spécifiez après le mot-
clé OWNER.
Le directory_path est le chemin absolu vers un répertoire vide
utilisé pour l’espace de table. Les utilisateurs du système
PostgreSQL doivent posséder ce répertoire pour pouvoir y lire et
y écrire des données.
Une fois qu’un tablespace est créé, vous pouvez le spécifier dans
les instructions CREATE DATABASE, CREATE TABLE et CREATE INDEX
pour stocker les fichiers de données des objets dans le
tablespace.
PostgreSQL CREATE TABLE examples
L’instruction suivante utilise CREATE TABLESPACE pour créer un
nouvel espace appelé ts_primary avec l’emplacement physique c :
pgdata primary.
44
Pour lister tous les tablespaces dans le serveur de base de
données PostgreSQL actuel, vous utilisez la commande db :
\db
Résultat :
List of tablespaces
Name | Owner | Location
------------+----------+-------------------
pg_default | postgres |
pg_global | postgres |
ts_primary | postgres | c:\pgdata\primary
(4 rows)
List of tablespaces
Name | Owner | Location | Access privileges |
Options | Size | Description
------------+----------+-------------------+-------------------+-
--------+---------+-------------
pg_default | postgres | | |
| 124 MB |
pg_global | postgres | | |
| 625 kB |
La syntaxe suivante crée la base de données logistiques qui
ts_primary
utilise | postgrests_primary
le tablespace | c:\pgdata\primary
: | |
| 0 bytes |
(4 rows)DATABASE logistics TABLESPACE ts_primary;
CREATE
La clause TABLESPACE indique le tablespace que la base de données
logistique utilisera pour stocker les données.
L’instruction suivante crée une nouvelle table appelée livraisons
et insère une ligne dans la table :
CREATE TABLE deliveries (
delivery_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
order_date DATE,
customer_id INT
);
45
Comme le tablespace ts_primary contient des données, vous pouvez
afficher ses informations en utilisant la commande suivante dans
psql :
\db+ ts_primary
Resultat :
Résumé
Un tablespace est un emplacement sur le périphérique de stockage
où PostgreSQL stocke les fichiers de données.
Utilisez l’instruction CREATE TABLESAPCE pour créer un nouvel
espace de table.
46
ALTER TABLESPACE tablespace_name RENAME TO new_name;
Résumé :
- Utilisez l’instruction ALTER TABLESPACE RENAME TO pour renommer
un tablespace.
- Utilisez ALTER TABLESPACE OWNER TO pour changer le propriétaire
d’un tablespace.
- Utilisez ALTER TABLESPACE SET pour définir les paramètres d’un
tablespace.
47
DROP TABLESPACE [IF EXISTS] tablespace_name;
Dans cette syntaxe, vous spécifiez le nom du tablespace que vous
souhaitez supprimer après les mots-clés DROP TABLESPACE.
Vous utilisez l’option IF EXISTS pour demander à PostgreSQL
d’émettre un avis au lieu d’une erreur lorsque le tablespace
n’existe pas.
Seuls les propriétaires de tablespace ou les superutilisateurs
peuvent exécuter l’instruction DROP TABLESPACE pour supprimer le
tablespace.
Exemple PostgreSQL DROP TABLESPACE
Tout d’abord, créez un nouveau tablespace nommé demo et mappez-le
au répertoire c : data demo.
CREATEdessin
TABLESPACE demo LOCATION 'c:/data/demo';
Deuxièmement, créer une nouvelle base de données nommée dbdemo et
définir son tablespace pour la démonstration :
48
Quatrièmement, essayez de supprimer l’espace de demo:
5. Rôles et Privilèges
5.1 Création d’un rôle
49
Typiquement, les rôles qui se connectent sont appelés rôles de
connexion. Ils sont équivalents aux utilisateurs dans d’autres
systèmes de base de données.
Lorsque les rôles contiennent d’autres rôles, ce sont des groupes
de rôle.
PostgreSQL CREATE ROLE
Pour créer un nouveau rôle, utilisez la syntaxe CREATE ROLE comme
suit :
CREATE ROLE role_name;
Lorsque vous créez un rôle, il est valide dans toutes les bases
de données du serveur de base de données (ou cluster).
L’instruction suivante utilise l’instruction CREATE ROLE pour
créer un nouveau rôle appelé bob :
CREATE ROLE bob;
50
rolname
---------------------------
pg_monitor
pg_read_all_settings
pg_read_all_stats
pg_stat_scan_tables
pg_read_server_files
pg_write_server_files
pg_execute_server_program
pg_signal_backend
postgres
bob
Noter que les rôles qui commencent par pg_ sont des rôles
système.
Si vous utilisez l’outil psql, vous pouvez utiliser la commande
du pour lister tous les rôles existants dans le serveur de base
de données PostgreSQL actuel.
\du
Résultat :
List of roles
Role name | Attributes
| Member of
-----------+-----------------------------------------------------
-------+-----------
bob | Cannot login
| {}
postgres | Superuser, Create role, Create DB, Replication,
Bypass RLS | {}
51
Dans cette syntaxe, le mot-clé WITH est optionnel. Et l’option
peut être un ou plusieurs attributs, y compris SUPER, CREATEDB,
CREATEROLE, etc.
a) Créer des rôles de connexion
Par exemple, l’instruction suivante crée un rôle appelé alice qui
a le privilège de connexion et un mot de passe initial :
52
CREATE ROLE dba
CREATEDB
LOGIN
PASSWORD 'Abcd1234';
La commande psql suivante montre tous les rôles que nous avons
créés jusqu’à présent :
\du
53
List of roles
Role name | Attributes
| Member of
-----------+-----------------------------------------------------
-------+-----------
alice |
| {}
api | 1000 connections
| {}
bob | Cannot login
| {}
dba | Create DB
| {}
john | Superuser
| {}
postgres | Superuser, Create role, Create DB, Replication,
Bypass RLS | {}
Résumé :
PostgreSQL utilise des rôles pour représenter les comptes
utilisateurs. Un rôle qui peut se connecter est équivalent à un
compte utilisateur dans d’autres systèmes de base de données.
Utilisez les attributs de rôle pour spécifier les privilèges des
rôles, par exemple, LOGIN permet au rôle de se connecter,
CREATEDB permet au rôle de créer une nouvelle base de données,
SUPERUSER permet au rôle d’avoir tous les privilèges.
5.2 Octroyer des privilèges
54
Dans cette syntaxe :
Tout d’abord, spécifiez la privilege_list qui peut être SELECT,
INSERT, UPDATE, DELETE, TRUNCATE, etc. Vous utilisez l’option ALL
pour accorder tous les privilèges d’une table au rôle.
Deuxièmement, spécifiez le nom de la table après le mot-clé ON.
Troisièmement, spécifiez le nom du rôle auquel vous souhaitez
accorder des privilèges.
Exemples de déclarations PostgreSQL GRANT
Tout d’abord, utilisez l’utilisateur postgres pour vous connecter
au serveur de base de données PostgreSQL en utilisant n’importe
quel outil client de votre choix.
Deuxièmement, créer un nouveau rôle d’utilisateur appelé joe qui
peut se connecter au serveur de base de données PostgreSQL :
55
Pour accorder le privilège SELECT sur la table des candidats au
responsable du rôle, vous exécutez la syntaxe GRANT dans la
session postgres :
56
Accorder tous les privilèges sur une table à un rôle
La déclaration suivante accorde tous les privilèges sur la table
des candidats au joe de rôle :
GRANT ALL
ON candidates
TO joe;
Accorder tous les privilèges sur toutes les tables d’un schéma à
un rôle
La déclaration suivante accorde tous les privilèges sur toutes
les tables dans le schéma public de la base d’échantillons
dvdrental au rôle joe :
GRANT ALL
ON ALL TABLES
IN SCHEMA "public"
TO joe;
Attribuer SELECT à tous les tableaux
Parfois, vous voulez créer un rôle readonly qui ne peut
sélectionner les données de toutes les tables dans un schéma
spécifié.
Pour ce faire, vous pouvez accorder le privilège SELECT sur
toutes les tables du schéma public comme ceci :
GRANT SELECT
ON ALL TABLES
IN SCHEMA "public"
TO reader;
Jusqu’à présent, vous avez appris à accorder des privilèges sur
les tables. Pour accorder des privilèges sur d’autres objets,
consultez la syntaxe de l’instruction GRANT.
Résumé :
Utilisez l’instruction GRANT pour accorder des privilèges sur des
objets de base de données à un rôle.
57
L’instruction REVOKE révoque les privilèges précédemment accordés
sur les objets de base de données d’un rôle.
Ce qui suit montre la syntaxe de l’instruction REVOKE qui révoque
les privilèges sur une ou plusieurs tables d’un rôle :
GRANT ALL
ON film
TO jim;
58
Enfin, accordez le privilège SELECT sur la table des acteurs au
rôle jim:
GRANT SELECT
ON actor
TO jim;
REVOKE SELECT
ON actor
FROM jim;
REVOKE ALL
ON film
FROM jim;
Résumé
Utilisez l’instruction PostgreSQL REVOKE pour révoquer les
privilèges précédemment accordés sur les objets de base de
données d’un rôle.
59
ALTER ROLE role_name [WITH] option;
60
Deuxièmement, créez un nouveau rôle appelé calf à l’aide de la
syntaxe CREATE ROLE :
\du calf
Résultat :
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
calf | Superuser | {}
List of roles
Role name | Attributes | Member
of
-----------+---------------------------------------------+-------
----
calf | Superuser +| {}
Utilisation|de PostgreSQL
Password ALTER
valid ROLE
until pour renommer
2050-01-01 les rôles
00:00:00-08 |
61
Pour changer le nom d’un rôle, vous utilisez la syntaxe suivante
ALTER ROLE :
Dans cette syntaxe, vous spécifiez le nom du rôle après les mots-
clés ALTER ROLE et le nouveau nom du rôle après le mot-clé TO.
Un super utilisateur peut renommer n’importe quel rôle. Un rôle
avec le privilège CREATEROLE peut renommer les rôles sans super
utilisateur.
Si vous utilisez un rôle pour vous connecter au serveur de base
de données PostgreSQL et le renommer dans la session courante,
vous obtiendrez une erreur :
62
Deuxièmement, spécifiez un nom de base de données après le mot-
clé IN DATABASE pour le modifier uniquement pour les sessions de
la base de données nommée. Si vous omettez la clause IN DATABASE,
la modification sera appliquée à toutes les bases de données.
Troisièmement, spécifiez le paramètre de configuration et la
nouvelle valeur dans la clause SET.
Les super-utilisateurs peuvent modifier les valeurs par défaut de
n’importe quel rôle. Les rôles avec l’attribut CREATEROLE peuvent
définir les valeurs par défaut pour les rôles non superposés. Les
rôles ordinaires ne peuvent être définis que par défaut. Seuls
les superutilisateurs peuvent modifier un paramètre pour tous les
rôles dans toutes les bases de données.
Résumé :
Utilisez l’option ALTER ROLE role_name pour modifier les
attributs d’un rôle.
Utilisez ALTER ROLE role_name RENAME TO new_role pour renommer un
rôle.
Utilisez la syntaxe ALTER ROLE role_name SET param=value pour
modifier la valeur par défaut de session d’un rôle pour une
variable de configuration.
63
Dans cette syntaxe :
Spécifiez le nom du rôle que vous souhaitez supprimer après les
mots-clés DROP ROLE.
Utilisez l’option IF EXISTS si vous voulez que PostgreSQL émette
un avis au lieu d’une erreur lorsque vous supprimez un rôle qui
n’existe pas.
Pour supprimer un rôle de super utilisateur, vous devez être un
super utilisateur. Pour supprimer des rôles non superposés, vous
devez avoir le privilège CREATEROLE.
Lorsque vous supprimez un rôle référencé dans une base de
données, PostgreSQL génère une erreur. Dans ce cas, vous devez
suivre deux étapes :
Tout d’abord, supprimez les objets de base de données appartenant
au rôle en utilisant l’état DROP OWNED ou réaffectez la propriété
des objets de base de données à un autre rôle REASSIGN OWNED.
Deuxièmement, révoquer toute autorisation accordée au rôle.
L’état REASSIGN OWNED réaffecte la propriété de tous les objets
dépendants d’un rôle cible à un autre rôle. Comme l’instruction
REASSIGN OWNED ne peut accéder qu’aux objets de la base de
données courante, vous devez exécuter cette instruction dans
chaque base de données qui contient des objets appartenant au
rôle cible.
64
Tout d’abord, nous allons créer un nouveau rôle appelé alice et
utiliser ce rôle pour créer une table nommée clients.
Ensuite, nous allons vous montrer étape par étape comment
supprimer le rôle alice du serveur de base de données PostgreSQL.
Nous utiliserons l’outil psql. Cependant, vous pouvez utiliser
n’importe quel outil client de votre choix.
Étape 1. Définir un nouveau rôle et une nouvelle base de données
Tout d’abord, connectez-vous à PostgreSQL en utilisant le rôle
postgres :
dessin
psql -U postgres
Deuxièmement, créer un nouveau rôle appelé alice:
dessin create role alice with login password 'Abcd1234';
postgres=#
Troisièmement, accordez à alice le privilège créé :
Dessin alter role alice createdb;
postgres=#
Quatrièmement, créer une nouvelle base de données appelée
ventes :
dessin
postgres=# create database sales;
Quitter la session en cours :
dessin
postgres=# \q
Étape 2. Utilisation du nouveau rôle pour créer des objets de
base de données
Tout d’abord, connectez-vous au serveur de base de données
PostgreSQL en utilisant le rôle alice:
dessin
psql -U alice -W sales
Deuxièmement, créer une nouvelle table dans la base de données
des ventes :
65
sales=> \dt
List of relations
dessin
Schema | Name | Type | Owner
--------+-----------+-------+-------
public | customers | table | alice
(1 row)
Error:
66
dessin
sales=#\q
Résumé :
Utilisez l’instruction PostgreSQL DROP ROLE pour supprimer un
rôle spécifié.
Si un rôle a des objets dépendants, utilisez les instructions
REASSIGN OWNED et DROP OWNED pour supprimer les objets dépendants
du rôle avant d’exécuter l’instruction DROP ROLE.
5.6 Groupe de rôle
Il est plus facile de gérer les rôles en tant que groupe afin que
vous puissiez accorder ou révoquer les privilèges d’un groupe
dans son ensemble au lieu de le faire sur un rôle individuel.
En règle générale, vous créez un rôle qui représente un groupe,
puis vous attribuez des rôles individuels aux membres du groupe.
Par convention, un rôle de groupe n’a pas le privilège LOGIN.
Cela signifie que vous ne pourrez pas utiliser le rôle de groupe
pour vous connecter à PostgreSQL.
Pour créer un rôle de groupe, utilisez la syntaxe CREATE ROLE
comme suit :
67
List of roles
Role name | Attributes
| Member of
-----------+-----------------------------------------------------
-------+-----------
alice |
| {}
api | 1000 connections
| {}
bob | Cannot login
| {}
dba | Create DB
| {}
john | Superuser
| {}
postgres | Superuser, Create role, Create DB, Replication,
Bypass RLS | {}
sales | Cannot login
| {}
68
List of roles
Role name | Attributes
| Member of
-----------+-----------------------------------------------------
-------+-----------
alice |
| {sales}
api | 1000 connections
| {}
bob | Cannot login
| {}
dba | Create DB
| {}
john | Superuser
| {}
postgres | Superuser, Create role, Create DB, Replication,
Bypass RLS | {}
sales | Cannot login
| {}
69
Étape 1. Établir une base de données et des tableaux
a) Connectez-vous à PostgreSQL en utilisant la base de données
postgres.
b) Créer une nouvelle base de données appelée corp :
\c corp
4) Créer la table des contacts :
create table contacts(
id int generated always as identity primary key,
name varchar(255) not null,
phone varchar(255) not null
);
\z
d) Créer le rôle du groupe marketing :
create role marketing noinherit;
70
e) Créer le rôle du groupe planning :
create role planning noinherit;
f) Accorder tous les privilèges sur la table de contacts au
marketing :
71
f) Après avoir exécuté la syntaxe SET ROLE suivante :
RESET ROLE;
Résumé :
Gérer les privilèges sur les rôles de groupe au lieu des rôles
individuels.
Les rôles avec l’attribut INHERIT prennent tous les privilèges
des rôles de groupe dont ils sont membres.
$ psql -U postgres
72
Password:
postgres=#
postgres=# \du
postgres=#\du+
73
Résumé :
Utilisez la commande \du ou \du+ psql pour lister tous les
utilisateurs du serveur de base de données actuel.
Utilisez l’instruction SELECT pour rechercher les informations
utilisateur dans le catalogue pg_catalog.pg_user.
74
Ensuite, exécutez le programme pg_dump et utilisez les options
suivantes pour sauvegarder la base de données dvdrental dans le
fichier dvdrental.tar du dossier c:\pgbackup\.
pg_dump -U postgres -W -F t dvdrental > c:\pgbackup\dvdrental.tar
75
En plus du programme pg_dump, PostgreSQL vous fournit également
l’outil pg_dumpall qui vous permet de sauvegarder toutes les
bases de données à la fois. Toutefois, il n’est pas recommandé
d’utiliser cet outil pour les raisons suivantes :
Le programme pg_dumpall exporte toutes les bases de données,
l’une après l’autre, dans un seul fichier de script, ce qui vous
empêche d’effectuer la restauration parallèle. Si vous
sauvegardez toutes les bases de données de cette façon, le
processus de restauration prendra plus de temps.
Le traitement du dumping de toutes les bases de données prend
plus de temps qu’individuellement, de sorte que vous ne savez pas
quel dump de chaque base de données se rapporte à un moment
précis dans le temps.
Si vous avez une bonne raison d’utiliser pg_dumpall pour
sauvegarder toutes les bases de données, voici la commande :
76
Pour sauvegarder la définition des tablespaces, utiliser la
commande suivante :
77
Outre l’outil psql, vous pouvez utiliser le programme pg_restore
pour restaurer les bases de données sauvegardées par les outils
pg_dump ou pg_dumpall. Avec le programme pg_restore, vous avez
différentes options pour restaurer les bases de données, par
exemple :
Le pg_restore permet d’effectuer des restaurations parallèles en
utilisant l’option -j pour spécifier le nombre de threads à
restaurer. Chaque thread restaure une table séparée
simultanément, ce qui accélère considérablement le processus.
Actuellement, pg_restore supporte cette option pour le seul
format de fichier personnalisé.
Le pg_restore vous permet également de restaurer des objets de
base de données spécifiques dans un fichier de sauvegarde qui
contient la base de données complète.
La pg_restore peut prendre une base de données sauvegardée dans
l’ancienne version et la restaurer dans la version plus récente.
Créons une nouvelle base de données nommée newdvdrental pour
pratiquer avec l’outil pg_restore.
78
Tout d’abord, créez une nouvelle base de données nommée
dvdrental_tpl.
psql -U postgres
postgres=# \c dvdrental
79
SELECT
table_name,
column_name,
data_type
FROM
information_schema.columns
WHERE
table_name = 'city';
postgres=# \l or \l+
SELECT *
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
schemaname != 'information_schema';
postgres=# \dn
SELECT version();
80