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:// | ||