Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
software:applications:postgresql:introduction_client_postgres_psql [2022/11/10 09:51] – supprimée - modification externe (Unknown date) 127.0.0.1 | software:applications:postgresql:introduction_client_postgres_psql [2022/11/10 11:24] (Version actuelle) – yoann | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | :TODO: : | ||
+ | |||
+ | ====== PostgreSQL : Introduction au client psql ===== | ||
+ | |||
+ | Pour s' | ||
+ | |||
+ | <code bash> | ||
+ | docker container run --detach --rm --name pg_test -e POSTGRES_PASSWORD=" | ||
+ | </ | ||
+ | |||
+ | On exécute ensuite un shell interactif dans le conteneur pour lancer le client PostgreSQL **psql**: | ||
+ | |||
+ | <code bash> | ||
+ | docker container exec --interactive --tty pg_test /bin/bash -i -l | ||
+ | |||
+ | # depuis le shell interactif et l' | ||
+ | id | ||
+ | uid=0(root) gid=0(root) groups=0(root) | ||
+ | </ | ||
+ | |||
+ | Si on invoque le client **psql** sans argument, le rôle et le nom de la base utilisés par défaut sont déduit du nom de l' | ||
+ | |||
+ | <code bash> | ||
+ | psql | ||
+ | psql: FATAL: | ||
+ | |||
+ | # On peut spécifier le rôle à utiliser via l' | ||
+ | psql -U postgres | ||
+ | |||
+ | # Equivalent | ||
+ | PGUSER=postgres psql | ||
+ | </ | ||
+ | |||
+ | A la création du serveur PostgreSQL, un rôle **postgres** et une base postgres sont créés: | ||
+ | * Le rôle postgres à tous les droits sur le serveur de base de données, c'est l' | ||
+ | |||
+ | Lorsque le client s' | ||
+ | |||
+ | ===== Les méta commandes ===== | ||
+ | |||
+ | Le client **psql** dispose de méta-commandes qui sont interprétées par psql lui-même. Elles ont été pensées | ||
+ | * Elles commencent par un backslash ' | ||
+ | * Les mnémoniques sont en minuscules; | ||
+ | * Elles se terminent par un retour à la ligne ou sont séparées par ' | ||
+ | |||
+ | |||
+ | <code sql> | ||
+ | -- Afficher l'aide concernant les meta-commandes de psql | ||
+ | \? | ||
+ | |||
+ | -- Lister les bases de données | ||
+ | \list | ||
+ | \l | ||
+ | |||
+ | -- Afficher les objets (display) tables, vues, séquences etc | ||
+ | \d | ||
+ | |||
+ | -- Afficher également les objets système | ||
+ | \dS | ||
+ | |||
+ | -- Afficher les objets système avec des infos complémentaires | ||
+ | \dS+ | ||
+ | |||
+ | -- Afficher l'aide des commandes SQL | ||
+ | \h | ||
+ | |||
+ | -- Lire des commandes depuis un fichier de script | ||
+ | \i import_file.sql | ||
+ | |||
+ | -- Écrire dans un fichier | ||
+ | \o outputfile.txt | ||
+ | |||
+ | -- Afficher les variables internes psql | ||
+ | \set | ||
+ | |||
+ | \echo :USER | ||
+ | |||
+ | -- Exécuter une commande externe | ||
+ | \! ls -lh | ||
+ | |||
+ | -- Quitter le client en mode interactif | ||
+ | \q | ||
+ | </ | ||
+ | |||
+ | ===== Exécution pas à pas ===== | ||
+ | |||
+ | Pour le débogage des scripts ou des commandes, il peut être intéressant de démarrer psql avec l' | ||
+ | |||
+ | <code bash> | ||
+ | psql -s -U alice dbtest | ||
+ | </ | ||
+ | |||
+ | Si psql n'a pas été lancé avec l' | ||
+ | |||
+ | < | ||
+ | \set SINGLESTEP on | ||
+ | </ | ||
+ | |||
+ | Pour quitter le mode pas à pas on supprime la variable: | ||
+ | < | ||
+ | \unset SINGLESTEP | ||
+ | </ | ||
+ | |||
+ | ===== Gestion des rôles ===== | ||
+ | |||
+ | La notion de rôle a permit d' | ||
+ | <code sql> | ||
+ | -- Affiche les rôles et leurs attributs (droits) | ||
+ | \du | ||
+ | |||
+ | -- Équivalent | ||
+ | \dg | ||
+ | |||
+ | -- Retourne les noms des rôles uniquement | ||
+ | SELECT rolname AS roles FROM pg_roles; | ||
+ | </ | ||
+ | |||
+ | Dans les exemples qui suivent on manipule les rôles pour créer des utilisateurs et des groupes: | ||
+ | * Un utilisateur équivaut à un rôle avec le privilège LOGIN; | ||
+ | * Un groupe équivaut à un rôle sans droit de connexion (NOLOGIN). | ||
+ | |||
+ | |||
+ | <code sql> | ||
+ | -- Affecter des droits à un rôle | ||
+ | create role john with NOLOGIN; | ||
+ | |||
+ | -- Modifier un rôle existant | ||
+ | alter role john with LOGIN CREATEDB; | ||
+ | |||
+ | -- Affecter un mot de passe à un rôle existant | ||
+ | alter role john password ' | ||
+ | |||
+ | -- Annuler le mot de passe associé à un rôle | ||
+ | alter role john with password null; | ||
+ | |||
+ | CREATE ROLE alice WITH LOGIN PASSWORD ' | ||
+ | |||
+ | -- Définir une date limite de validité | ||
+ | CREATE ROLE bob WITH LOGIN PASSWORD ' | ||
+ | </ | ||
+ | |||
+ | On affecte un ensemble de privilèges à un groupe (rôle sans droit de connexion) puis on affecte le rôle aux utilisateurs. Les utilisateurs héritent alors des droits du groupe. | ||
+ | <code sql> | ||
+ | |||
+ | -- Création d'un groupe nommé db_manager | ||
+ | create role db_manager with NOLOGIN; | ||
+ | |||
+ | -- Équivalent | ||
+ | CREATE ROLE db_manager; | ||
+ | |||
+ | -- Équivalent (syntaxe dépréciée) | ||
+ | create group db_manager; | ||
+ | </ | ||
+ | |||
+ | On affecte un ensemble de droits au groupe: | ||
+ | <code sql> | ||
+ | -- Le role db_manager permet la création de bases de données | ||
+ | ALTER ROLE db_manager WITH CREATEDB; | ||
+ | </ | ||
+ | |||
+ | On peut ensuite associer un ou des utilisateurs au groupe. Cela revient à affecter le rôle à l’utilisateur. Les utilisateurs héritent alors des droits du groupe: | ||
+ | |||
+ | <code sql> | ||
+ | -- Affecter le rôle db_manager à l' | ||
+ | GRANT db_manager TO alice; | ||
+ | |||
+ | -- Équivalent (syntaxe dépréciée) | ||
+ | ALTER GROUP db_manager ADD USER alice; | ||
+ | </ | ||
+ | |||
+ | Pour retirer le rôle db_manager à l' | ||
+ | <code sql> | ||
+ | REVOKE db_manager FROM alice; | ||
+ | </ | ||
+ | |||
+ | On peut à présent tester les droits en se reconnectant avec alice | ||
+ | <code bash> | ||
+ | psql -W -U alice postgres | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | -- Retourne le rôle à la connexion (alice) | ||
+ | SELECT current_role; | ||
+ | \echo :USER | ||
+ | |||
+ | -- Change de rôle | ||
+ | SET ROLE db_manager; | ||
+ | |||
+ | -- Retourne le rôle choisit (ici db_manager) | ||
+ | SELECT current_role; | ||
+ | |||
+ | -- Création d'une base | ||
+ | CREATE DATABASE db_test; | ||
+ | |||
+ | -- Modification du rôle actif | ||
+ | SET ROLE alice; | ||
+ | |||
+ | \q | ||
+ | </ | ||
+ | |||
+ | ===== Gestion des bases ===== | ||
+ | |||
+ | Afficher les bases: | ||
+ | < | ||
+ | \list | ||
+ | \l | ||
+ | </ | ||
+ | |||
+ | Pour créer une base | ||
+ | <code sql> | ||
+ | CREATE DATABASE mabase; | ||
+ | </ | ||
+ | |||
+ | Réaffecter un base à un utilisateur existant: | ||
+ | <code sql> | ||
+ | ALTER DATABASE mabase OWNER TO john; | ||
+ | </ | ||
+ | |||
+ | Supprimer la base. | ||
+ | <code sql> | ||
+ | DROP DATABASE mabase; | ||
+ | </ | ||
+ | |||
+ | ===== Importer des données ===== | ||
+ | |||
+ | |||
+ | ===== Références ===== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// |