Outils graphiques et console

Module DE

Dalibo SCOP

24.04

17 avril 2024

Sur ce document

Formation Module DE
Titre Outils graphiques et console
Révision 24.04
PDF https://dali.bo/de_pdf
EPUB https://dali.bo/de_epub
HTML https://dali.bo/de_html
Slides https://dali.bo/de_slides
TP https://dali.bo/de_tp
TP (solutions) https://dali.bo/de_solutions

Licence Creative Commons CC-BY-NC-SA

Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :

  • Paternité
  • Pas d’utilisation commerciale
  • Partage des conditions initiales à l’identique

Marques déposées

PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.

Versions de PostgreSQL couvertes

Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 12 à 16.

Outils graphiques et console

PostgreSQL

Préambule

Les outils graphiques et console :

  • les outils graphiques d’administration
  • la console
  • les outils de contrôle de l’activité
  • les outils DDL
  • les outils de maintenance

Plan

  • Outils en ligne de commande de PostgreSQL
  • Réaliser des scripts
  • Outils graphiques

Outils console de PostgreSQL

  • Plusieurs outils PostgreSQL en ligne de commande existent
    • une console interactive
    • des outils de maintenance
    • des outils de sauvegardes/restauration
    • des outils de gestion des bases

Outils : Gestion des bases

  • createdb : ajouter une nouvelle base de données
  • createuser : ajouter un nouveau compte utilisateur
  • dropdb : supprimer une base de données
  • dropuser : supprimer un compte utilisateur

Outils : Sauvegarde / Restauration

  • Sauvegarde logique, pour une instance
    • pg_dumpall : sauvegarder l’instance PostgreSQL
  • Sauvegarde logique, pour une base de données
    • pg_dump : sauvegarder une base de données
    • pg_restore : restaurer une base de données PostgreSQL
  • Sauvegarde physique :
    • pg_basebackup
    • pg_verifybackup

Outils : Maintenance

  • Maintenance des bases
    • vacuumdb : récupérer l’espace inutilisé, statistiques
    • clusterdb : réorganiser une table en fonction d’un index
    • reindexdb : réindexer

Outils : Maintenance de l’instance

  • initdb : création d’instance
  • pg_ctl : lancer, arrêter, relancer, promouvoir l’instance
  • pg_upgrade : migrations majeures
  • pg_config, pg_controldata : configuration

Autres outils en ligne de commande

  • pgbench pour des tests
  • Outils liés à la réplication/sauvegarde physique, aux tests, analyse…

Chaînes de connexion

Pour se connecter à une base :

  • paramètres propres aux outils
  • via la libpq
    • variables d’environnement
    • par chaînes clés/valeur
    • par chaînes URI
    • idem en Python,PHP,Perl
  • JDBC/.NET/ODBC ont des syntaxes spécifiques

Paramètres

Outils habituels, et très souvent :

$ psql -h serveur -d mabase -U nom -p 5432
Option Variable Valeur par défaut
-h HÔTE $PGHOST /tmp, /var/run/postgresql
-p PORT $PGPORT 5432
-U NOM $PGUSER nom de l’utilisateur OS
-d base $PGDATABASE nom de l’utilisateur PG
$PGOPTIONS options de connexions

Autres variables d’environnement

  • $PGAPPNAME
  • $PGSSLMODE
  • $PGPASSWORD

Chaînes libpq clés/valeur

psql "host=serveur1  user=jeanpierre  dbname=comptabilite"
psql -d "host=serveur1  port=5432  user=jeanpierre  dbname=comptabilite
     sslmode=require  application_name='chargement'
     options='-c work_mem=30MB' "

Chaînes URI

psql -d "postgresql://jeanpierre@serveur1:5432/comptabilite"
psql \
"postgres://jeanpierre@serveur1/comptabilite?sslmode=require\
&options=-c%20synchronous_commit%3Doff"
psql -d postgresql://serveur1/comptabilite?user=jeanpierre\&port=5432

Connexion avec choix automatique du serveur

psql "host=serveur1,serveur2,serveur3
      port=5432,5433,5434
      user=jeanpierre  dbname=comptabilite
      target_session_attrs=read-write
      load_balance_hosts=random"   # v16

Authentification d’un client (outils console)

  • En interactif (psql)
    • -W | --password
    • -w | --no-password
  • Variable $PGPASSWORD
  • À préférer : fichier .pgpass
    • chmod 600 .pgpass
    • nom_hote:port:database:nomutilisateur:motdepasse

La console psql

  • Un outil simple pour
    • les opérations courantes
    • les tâches de maintenance
    • l’exécution des scripts
    • les tests
postgres$ psql
  base=#

Obtenir de l’aide et quitter

  • Obtenir de l’aide sur les commandes internes psql
    • \?
  • Obtenir de l’aide sur les ordres SQL
    • \h <COMMANDE>
  • Quitter
    • \q ou ctrl-D
    • quit ou exit (v11)

Gestion de la connexion

  • Modifier le mot de passe d’un utilisateur
    • \password nomutilisateur
  • Quelle est la connexion courante ?
    • \conninfo
    • SELECT current_user,session_user,system_user;
  • Se connecter à une autre base :
    • \c ma base
    • \c mabase utilisateur serveur 5432

Catalogue système : objets utilisateurs

Lister :

  • les bases de données
    • \l , \l+
  • les tables
    • \d, \d+, \dt , \dt+
  • les index
    • \di, \di+
  • les schémas
    • \dn
  • les fonctions & procédures
    • \df[+]
  • etc…

Catalogue système : rôles et accès

  • Lister les rôles (utilisateurs et groupes)
    • \du[+]
  • Lister les droits d’accès
    • \dp
  • Lister les droits d’accès par défaut
    • \ddp
    • ALTER DEFAULT PRIVILEGES
  • Lister les configurations par rôle et par base
    • \drds

Visualiser le code des objets

  • Voir les vues ou les fonctions & procédures
    • \dv, \df
  • Code d’une vue
    • \sv
  • Code d’une procédure stockée
    • \sf

Configuration

  • Lister les paramètres correspondants au motif indiqué
    • \dconfig (v15+)

Exécuter des requêtes

  • Exécuter une requête :
SELECT * FROM pg_tables ;
SELECT * FROM pg_tables \g
SELECT * FROM pg_tables \gx   -- une ligne par champ
INSERT INTOVALUES (1) \; INSERT INTOVALUES (2) ; -- 1 transaction
  • Rappel des requêtes:
    • flèche vers le haut
    • \g
    • Ctrl-R suivi d’un extrait de texte représentatif

Afficher le résultat d’une requête

  • \x pour afficher un champ par ligne
  • Affichage par paginateur si l’écran ne suffit pas
  • Préférer less :
    • set PAGER='less -S'
  • Ou outil dédié : pspg
    • \setenv PAGER 'pspg'

Afficher les détails d’une requête

  • \gdesc
  • Afficher la liste des colonnes correspondant au résultat d’exécution d’une requête
    • noms
    • type de données

Exécuter le résultat d’une requête

  • Exécuter le résultat d’une requête
    • \gexec

Manipuler le tampon de requêtes

  • Éditer
    • dernière requête : \e
    • vue : \ev nom_vue
    • fonction PL/pgSQL : \ef nom_fonction
  • Historique :
    • \s

Entrées/sorties

  • Charger et exécuter un script SQL
    • \i fichier.sql
  • Rediriger la sortie dans un fichier
    • \o resultat.out
  • Écrire un texte sur la sortie standard
    • \echo "Texte…"

Gestion de l’environnement système

  • Chronométrer les requêtes
    • \timing on
  • Exécuter une commande OS
    • \! ls -l (sur le client !)
  • Changer de répertoire courant
    • \cd /tmp
  • Affecter la valeur d’une variable d’environnement (v15+)
    • \getenv toto PATH

Variables internes psql

  • Positionner des variables internes
    • \set NOMVAR nouvelle_valeur
  • Variables internes usuelles
    • ON_ERROR_STOP : on / off
    • ON_ERROR_ROLLBACK : on / off / interactive
    • ROW_COUNT : nombre de lignes renvoyées par la dernière requête (v11)
    • ERROR : true si dernière requête en erreur (v11)
  • Ne pas confondre avec SET (au niveau du serveur) !

Variables utilisateur psql

  • Définir une variable utilisateur
    • \set NOMVAR nouvelle_valeur
  • Invalider une variable
    • \unset NOMVAR
  • Stockage du résultat d’une requête :
    • si résultat est une valeur unique
    • Exemple :
    SELECT now() AS maintenant \gset
    SELECT :'maintenant' ;

Tests conditionnels

  • \if
  • \elif
  • \else
  • \endif

Personnaliser psql

  • Fichier de configuration ~/.psqlrc
    • voire ~/.psqlrc-X.Y ou ~/.psqlrc-X
    • ignoré avec -X
  • Exemple de .psqlrc  :
\set ON_ERROR_ROLLBACK interactive  -- paramétrage de session
\timing on
\set PROMPT1 '%M:%> %n@%/%R%#%x'    -- invite
\set cfg 'SHOW ALL ;'               -- requête utilisable avec :cfg
\set cls '\\! clear;'               -- nettoyer l'écran avec :cls

Écriture de scripts shell

  • Script SQL
  • Script Shell
  • Exemple sauvegarde

Exécuter un script SQL avec psql

  • Avec -c :
psql -c 'SELECT * FROM matable' -c 'SELECT fonction(123)' ;
  • Avec un script :
psql -f nom_fichier.sql
psql < nom_fichier.sql
  • Depuis psql :
    • \i nom_fichier.sql

Gestion des transactions

  • psql est en mode auto-commit par défaut
    • variable AUTOCOMMIT
  • Ouvrir une transaction explicitement
    • BEGIN;
  • Terminer une transaction
    • COMMIT; ou ROLLBACK;
  • Ouvrir une transaction implicitement
    • option -1 (--single-transaction)

Écrire un script SQL

  • Attention à l’encodage des caractères
    • \encoding
    • SET client_encoding
  • Écriture des requêtes

Les blocs anonymes

  • Bloc procédural anonyme en PL/pgSQL :
DO $$
DECLARE r record;
BEGIN
    FOR r IN (SELECT schemaname, relname
              FROM pg_stat_user_tables
              WHERE coalesce(last_analyze, last_autoanalyze) IS NULL
              ) LOOP
        RAISE NOTICE 'Analyze %.%', r.schemaname, r.relname ;
        EXECUTE 'ANALYZE ' || quote_ident(r.schemaname)
                           || '.' || quote_ident(r.relname) ;
    END LOOP;
END$$;

Utiliser des variables

\set nom_table 'ma_table'
SELECT * FROM :"nom_table";

\set valeur_col1 'test'
SELECT * FROM :"nom_table" WHERE col1 = :'valeur_col1';
\prompt 'invite' nom_variable
\unset variable
psql -v VARIABLE=valeur

Gestion des erreurs

  • Ignorer les erreurs dans une transaction
    • ON_ERROR_ROLLBACK
  • Gérer des erreurs SQL en shell
    • ON_ERROR_STOP

Formatage des résultats

  • Sortie simplifiée pour exploitation automatisée : -XAt
    • -t (--tuples-only)
    • -A (--no-align)
    • -X (--no-psqlrc)
    • séparateurs : -F (--field-separator) et -R (--record-separator)
  • Formats HTML ou CSV
    • -H | --html
    • --csv (à partir de la version 12)

Résultats en pivot (tableau croisé)

  • \crosstabview [colV [colH [colD [colonnedetriH]]]]
  • Exécute la requête en tampon
    • au moins 3 colonnes

Formatage dans les scripts SQL

  • Donner un titre au résultat de la requête
    • \pset title 'Résultat de la requête
  • Formater le résultat
    • \pset format html (ou csv…)
  • Diverses options peu utilisées

Scripts & Crontab

  • cron
    • Attention aux variables d’environnement !
  • Ou tout ordonnanceur

Exemple de script de sauvegarde

  • Sauvegarder une base et classer l’archive (squelette) :
#!/bin/bash
# Paramètre : la base
t=$(mktemp)                    # fichier temporaire
pg_dump -Fc "$1" > $t          # sauvegarde
d=$(eval date +%d%m%y-%H%M%S)  # date
mv $t /backup/"${1}_${d}.dump" # déplacement
exit 0
  • …et ajouter la gestion des erreurs !
  • …et les surveiller

Outils graphiques

  • Outils graphiques d’administration
    • temBoard
    • pgAdminIII et pgAdmin 4
    • pgmodeler

temBoard

temBoard - PostgreSQL Remote Control

  • Multi-instances
  • Surveillance OS / PostgreSQL
  • Suivi de l’activité
  • Gestion des performances de PostgreSQL
  • Configuration de chaque instance

temBoard - Vue parc

temBoard

temBoard - Tableau de bord

temBoard

temBoard - Activity

temBoard

temBoard - Supervision

temBoard

temBoard - Configuration

temBoard

temBoard - Maintenance

temBoard

pgAdmin 4

pgAdmin 4 : tableau de bord

pgAdmin 4

DBeaver

  • https://dbeaver.io
  • Version Community sous Licence Apache 2.0
  • Application Java Multiplateforme
  • Version web CloudBeaver aussi disponible
  • Supporte PostgreSQL (et ~ 80 autres SBGD)
  • Version Pro payante et plus complète

DBeaver : fenêtre principale

DBeaver

phpPgAdmin

phpPgAdmin

phpPgAdmin : fonctionnalités

adminer

Adminer

adminer : fonctionnalités

  • https://www.adminer.org/
  • Application web pour utilisateurs
  • Basique mais simple & efficace
  • Et simple : 1 fichier PHP
  • Multibases, multilangues
  • Licence : Apache License ou GPL 2

pgModeler

PgModeler

pgModeler

  • Site officiel : https://pgmodeler.io/
  • Licence : GPLv3
  • Modélisation de base de données
  • Fonctionnalité d’import export
  • Comparaison de base

Conclusion

  • Les outils en ligne de commande sont « rustiques » mais puissants
  • Ils peuvent être remplacés par des outils graphiques
  • En cas de problème, il est essentiel de les maîtriser.

Questions

N’hésitez pas, c’est le moment !

Quiz

Travaux pratiques

Travaux pratiques (solutions)