outils graphiques et consolecherslectrices&lecteurs,...

88
Module DE Outils graphiques et console 21.06

Upload: others

Post on 31-Mar-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Module DE

Outils graphiques et console

21.06

Page 2: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l
Page 3: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Dalibo SCOP

https://dalibo.com/formations

Outils graphiques et console

Module DE

Page 4: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

TITRE : Outils graphiques et consoleSOUS-TITRE : Module DE

REVISION: 21.06DATE: 30 juin 2021COPYRIGHT: © 2005-2021 DALIBO SARL SCOPLICENCE: Creative Commons BY-NC-SA

Postgres®, PostgreSQL® and the Slonik Logo are trademarks or registered trademarksof the PostgreSQL Community Association of Canada, and used with their permission.(Les noms PostgreSQL® et Postgres®, et le logo Slonik sont des marques déposées parPostgreSQL Community Association of Canada.Voir https://www.postgresql.org/about/policies/trademarks/ )

Remerciements : Ce manuel de formation est une aventure collective qui se transmet ausein de notre société depuis des années. Nous remercions chaleureusement ici toutesles personnes qui ont contribué directement ou indirectement à cet ouvrage, notam-ment : Jean-Paul Argudo, AlexandreAnriot, Carole Arnaud, Alexandre Baron, David Bidoc,Sharon Bonan, Franck Boudehen, Arnaud Bruniquel, Damien Clochard, Christophe Cour-tois, Marc Cousin, Gilles Darold, Jehan-Guillaume de Rorthais, Ronan Dunklau, Vik Fear-ing, Stefan Fercot, Pierre Giraud, Nicolas Gollet, Dimitri Fontaine, Florent Jardin, Vir-ginie Jourdan, Luc Lamarle, Denis Laxalde, Guillaume Lelarge, Benoit Lobréau, Jean-LouisLouër, Thibaut Madelaine, Adrien Nayrat, Alexandre Pereira, Flavie Perette, Robin Por-tigliatti, Thomas Reiss, Maël Rimbault, Julien Rouhaud, Stéphane Schildknecht, JulienTachoires, Nicolas Thauvin, Christophe Truffier, Cédric Villemain, Thibaud Walkowiak,Frédéric Yhuel.

Àpropos deDALIBO :DALIBO est le spécialiste français de PostgreSQL. Nous proposonsdu support, de la formation et du conseil depuis 2005. Retrouvez toutes nos formationssur https://dalibo.com/formations

Page 5: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

LICENCE CREATIVE COMMONS BY-NC-SA 2.0 FR

Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions

Vous êtes autorisé à :

• Partager, copier, distribuer et communiquer le matériel par tous moyens et soustous formats

• Adapter, remixer, transformer et créer à partir du matériel

Dalibo ne peut retirer les autorisations concédées par la licence tant que vous appliquezles termes de cette licence selon les conditions suivantes :

Attribution : Vous devez créditer l’œuvre, intégrer un lien vers la licence et indiquer si desmodifications ont été effectuées à l’œuvre. Vous devez indiquer ces informations par tousles moyens raisonnables, sans toutefois suggérer que Dalibo vous soutient ou soutient lafaçon dont vous avez utilisé ce document.

Pas d’Utilisation Commerciale : Vous n’êtes pas autorisé à faire un usage commercial de cedocument, tout ou partie du matériel le composant.

Partage dans les Mêmes Conditions : Dans le cas où vous effectuez un remix, que voustransformez, ou créez à partir du matériel composant le document original, vous devezdiffuser le document modifié dans les même conditions, c’est à dire avec la même licenceavec laquelle le document original a été diffusé.

Pas de restrictions complémentaires : Vous n’êtes pas autorisé à appliquer des conditionslégales ou des mesures techniques qui restreindraient légalement autrui à utiliser le doc-ument dans les conditions décrites par la licence.

Note : Ceci est un résumé de la licence. Le texte complet est disponible ici :

https://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode

Pour toute demande au sujet des conditions d’utilisation de ce document, envoyez vosquestions à [email protected] !

Page 6: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l
Page 7: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Chers lectrices & lecteurs,

Nos formations PostgreSQL sont issues de nombreuses années d’études, d’expériencede terrain et de passion pour les logiciels libres. Pour Dalibo, l’utilisation de PostgreSQLn’est pas une marque d’opportunisme commercial, mais l’expression d’un engagement delongue date. Le choix de l’Open Source est aussi le choix de l’implication dans la commu-nauté du logiciel.

Au-delà du contenu technique en lui-même, notre intention est de transmettre les valeursqui animent et unissent les développeurs de PostgreSQL depuis toujours : partage, ou-verture, transparence, créativité, dynamisme... Le but premier de nos formations est devous aider à mieux exploiter toute la puissance de PostgreSQL mais nous espérons égale-ment qu’elles vous inciteront à devenir un membre actif de la communauté en partageantà votre tour le savoir-faire que vous aurez acquis avec nous.

Nous mettons un point d’honneur à maintenir nos manuels à jour, avec des informationsprécises et des exemples détaillés. Toutefois malgré nos efforts et nos multiples relec-tures, il est probable que ce document contienne des oublis, des coquilles, des impréci-sions ou des erreurs. Si vous constatez un souci, n’hésitez pas à le signaler via l’[email protected] !

Page 8: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l
Page 9: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Table des Matières

Licence Creative Commons BY-NC-SA 2.0 FR 5

1 Outils graphiques et console 101.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2 Outils console de PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . 111.3 La console psql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.4 Écriture de scripts shell . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.5 Outils graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701.7 Travaux pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711.8 Travaux pratiques (solutions) . . . . . . . . . . . . . . . . . . . . . . . . 74

9

Page 10: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1 OUTILS GRAPHIQUES ET CONSOLE

10

Page 11: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.1 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• le précompilateur• les outils de maintenance

Ce module nous permet d’approcher le travail au quotidien du DBA et de l’utilisateur dela base de données.

L’outil le plus important est la console en mode texte, psql. Cet outil permet d’effectuerl’ensemble des activités DDL (Data Definition Language, instructions create, drop, alter...)et DML (Data Modification Language, instructions INSERT, UPDATE, DELETE, SELECT...).

1.1.1 PLAN

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

1.2 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

Les outils console de PostgreSQL que nous allons voir sont fournis avec la distributionde PostgreSQL. Ils permettent de tout faire : exécuter des requêtes manuelles, maintenirl’instance, sauvegarder et restaurer les bases.

https://dalibo.com/formations11

Page 12: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.2.1 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

Chacune de ces commandes est un « alias », un raccourci qui permet d’exécuter certainescommandes SQL directement depuis le shell sans se connecter explicitement au serveur.L’option --echo permet de voir les ordres SQL envoyés.

Par exemple, la commande système dropdb est équivalente à la commande SQL DROPDATABASE. L’outil dropdb se connecte à la base de données nommée postgres et exécutel’ordre SQL et enfin se déconnecte.

La création d’une base se fait en utilisant l’outil createdb et en lui indiquant le nom dela nouvelle base, de préférence avec un utilisateur dédié. createuser crée ce que l’onappelle un « rôle », et appelle CREATE ROLE en SQL. Nous verrons plus loin les droits deconnexion, de superutilisateur, etc.

Une création de base depuis le shell peut donc ressembler à ceci :

$ createdb --echo --owner erpuser erp_prodSELECT pg_catalog.set_config('search_path', '', false);CREATE DATABASE erp_prod OWNER erpuser;

Alors qu’une création de rôle peut ressembler à ceci :

$ createuser --echo --login --no-superuser erpuserSELECT pg_catalog.set_config('search_path', '', false);CREATE ROLE erpuser NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

Et si le pg_hba.conf le permet :

$ psql -U erpuser erp_prod < script_installation.sql

12

Page 13: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.2.2 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

Ces commandes sont essentielles pour assurer la sécurité des données du serveur.

Comme son nom l’indique, pg_dumpall sauvegarde l’instance complète, autrement dittoutes les bases mais aussi les objets globaux. À partir de la version 12, il est cependantpossible d’exclure une ou plusieurs bases de cette sauvegarde.

Pour ne sauvegarder qu’une seule base, il est préférable de passer par l’outil pg_dump, quipossède plus d’options. Il faut évidemment lui fournir le nom de la base à sauvegarder.Pour sauvegarder notre base b1, il suffit de lancer la commande suivante :

$ pg_dump -f b1.sql b1

Pour la restauration d’une sauvegarde, l’outil habituel est pg_restore. psql est utilisépour la restauration d’une sauvegarde faite en mode texte (script SQL).

Ces deux outils réalisent des sauvegardes logiques, donc au niveau des objets logiques(tables, index, etc).

La sauvegarde physique (donc au niveau des fichiers) à chaud est possible avecpg_basebackup, qui copie un serveur en fonctionnement, journaux de transaction inclus.Son fonctionnement est nettement plus complexe qu’un simple pg_dump. pg_basebackupest utilisé par les outils de sauvegarde PITR, et pour créer des serveurs secondaires.pg_verifybackup permet de vérifier une sauvegarde réalisée avec pg_basebackup.

https://dalibo.com/formations13

Page 14: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.2.3 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

reindexdb, là encore, est un alias lançant des ordres REINDEX. Une réindexation péri-odique des index peut être utile. Par exemple, pour lancer une réindexation de la base b1en affichant la commande exécutée :

$ reindexdb --echo b1SELECT pg_catalog.set_config('search_path', '', false)REINDEX DATABASE b1;

vacuumdb permet d’exécuter les différentes variantes du VACUUM (FULL, ANALYZE,FREEZE...) depuis le shell, principalement le nettoyage des lignes mortes, la mise à jourdes statistiques sur les données, et la reconstruction de tables. L’usage est ponctuel, ledémon autovacuum s’occupant de cela en temps normal.

clusterdb lance un ordre CLUSTER, soit une reconstruction de la table avec tri selon unindex. L’usage est très spécifique.

1.2.4 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

Ces outils sont rarement utilisés directement, car on passe généralement par les outilsdu système d’exploitation et ceux fournis par les paquets, qui les utilisent. Ils peuventtoutefois servir et il faut les connaître.

initdb crée une instance, c’est-à-dire crée tous les fichiers nécessaires dans le répertoireindiqué (PGDATA). Les options permettent d’affecter certains paramètres par défaut. Laplus importante (car on ne peut corriger plus tard qu’à condition que l’instance soit ar-rêtée, donc en arrêt de production) est l’option --data-checksums activant les sommesde contrôle, dont l’activation est généralement conseillée.

pg_ctl est généralement utilisé pour démarrer/arrêter une instance, pour recharger lesfichiers de configuration après modification, ou pour promouvoir une instance secondaire

14

Page 15: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

en primaire. Toutes les actions possibles sont documentées ici1 .

pg_upgrade est utilisée pour convertir une instance existante lors d’une migration entreversions majeures.

pg_config fournit des informations techniques sur les binaires installés (chemins notam-ment).

pg_controldata fournit des informations techniques de base sur une instance.

1.2.5 AUTRES OUTILS EN LIGNE DE COMMANDE

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

pgbench est l’outil de base pour tester la charge et l’influence de paramètres. Créez les ta-bles de travail avec l’option -i, fixez la volumétrie avec -s, et lancez pgbench en précisantle nombre de clients, de transactions... L’outil vous calcule le nombre de transactions parsecondes et diverses informations statistiques. Les requêtes utilisées sont basiques maisvous pouvez fournir les vôtres.

D’autres outils sont liés à l’archivage (pg_receivewal) et/ou à la réplication par logshipping (pg_archivecleanup) ou logique (pg_recvlogical), au sauvetage d’instancessecondaires (pg_rewind), à la vérification de la disponibilité (pg_isready), à destests de la configuration matérielle (pg_test_fsync, pg_test_timing), ou d’intégrité(pg_checksums), à l’analyse (pg_waldump).

1.2.6 OPTIONS CONNEXION

Pour tous ces outils, au choix :

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

1https://www.postgresql.org/docs/current/app-pg-ctl.html

https://dalibo.com/formations15

Page 16: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Les options de connexion permettent de préciser l’utilisateur et la base de données utiliséspour la connexion initiale.

Lorsque l’une des options n’est pas précisée, la bibliothèque cliente PostgreSQL vérifiequ’il n’existe pas une variable shell correspondante et prend sa valeur. S’il ne trouve pasde variable, il utilise une valeur par défaut.

• -h HÔTE ou $PGHOST permet de préciser l’alias ou l’adresse IP de la machine quihéberge le serveur. Sans indication, sur Unix, le client se connecte sur la socketUnix généralement dans /var/run/postgresql (Red Hat, Debian) ou /tmp.

• -p PORT ou $PGPORT permet de préciser le port sur lequel le serveur écoute lesconnexions entrantes. Sans indication, le port par défaut est le 5432.

• -U NOM ou $PGUSER permet de préciser le nom de l’utilisateur utilisé pour la con-nexion. L’option -U n’est toutefois pas nécessaire, sous réserve que les argumentsde la ligne de commande respectent l’ordre NOM_BASE NOM_UTILISATEUR. Sans in-dication, le nom d’utilisateur PostgreSQL est le nom de l’utilisateur utilisé au niveausystème.

• -d base ou $PGDATABASE permet de préciser le nom de la base de données utiliséepour la connexion. Le drapeau -d n’est pas nécessaire sous réserve que le nom de labase de données soit le premier argument de la ligne de commande. Sans indicationle nom de la base de données de connexion correspondra au nom de l’utilisateurutilisé au niveau PostgreSQL.

La variable $PGOPTIONS permet de positionner des paramètres dans la session que l’onouvre et qui surchargent les valeurs par défaut. Elle est ponctuellement utile. Par exemplepour exécuter une requête avec un paramétrage de mémoire de tri différent :

PGOPTIONS="-c work_mem=100MB" psql -p 5433 -h serveur nombase < grosse_requete.sql

ou pour importer une sauvegarde sans être freiné par un serveur secondaire synchrone :

PGOPTIONS="-c synchronous_commit=local" pg_restore -d nombase sauvegarde.dump

À partir de la version 10, il est possible d’indiquer plusieurs hôtes et ports. L’hôte sélec-tionné est le premier qui répond au paquet de démarrage. Si l’authentication ne passepas, la connexion sera en erreur. Il est aussi possible de préciser si la connexion doit sefaire sur un serveur en lecture/écriture ou en lecture seule.

Par exemple, on se connectera ainsi au premier serveur de la liste qui soit ouvert en écri-ture et disponible parmi les 3 précisés :

psql postgresql://serveur1:5432,serveur2:5433,serveur3:5434/\mabase?target_session_attrs=read-write -U dupont

ou ainsi :

16

Page 17: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

psql "host=serveur1,serveur2,serveur3 port=5432,5433,5434target_session_attrs=read-write user=dupont dbname=mabase"

Toutes ces variables, ainsi que de nombreuses autres, sont documentées ici2 .

1.2.7 AUTHENTIFICATION D'UN CLIENT

• En interactif– -W | --password– -w | --no-password

• Variable $PGPASSWORD• À préférer : fichier .pgpass

– chmod 600 .pgpass– nom_hote:port:database:nomutilisateur:motdepasse

Options -W et -w

L’option -W oblige à saisir le mot de passe de l’utilisateur. C’est le comportement pardéfaut si le serveur demande un mot de passe. Si les accès aux serveurs sont configuréssans mot de passe et que cette option est utilisée, le mot de passe sera demandé et fournià PostgreSQL lors de la demande de connexion. Mais PostgreSQL ne vérifiera pas s’il estbon si la méthode d’authentification ne le réclame pas.

L’option -w empêche la saisie d’un mot de passe. Si le serveur a une méthoded’authentification qui nécessite un mot de passe, ce dernier devra être fourni par lefichier .pgpass ou par la variable d’environnement $PGPASSWORD. Dans tous les autrescas, la connexion échoue.

Variable $PGPASSWORD

Si psql détecte une variable $PGPASSWORD initialisée, il se servira de son contenu commemot de passe qui sera soumis pour l’authentification du client.

Fichier .pgpass

Le fichier .pgpass, situé dans le répertoire personnel de l’utilisateur ou celui référencé par$PGPASSFILE, est un fichier contenant les mots de passe à utiliser si la connexion requiertun mot de passe (et si aucun mot de passe n’a été spécifié). Sur Microsoft Windows, lefichier est nommé %APPDATA%\postgresql\pgpass.conf (où %APPDATA% fait référenceau sous-répertoire Application Data du profil de l’utilisateur).

Ce fichier devra être composé de lignes du format :2https://docs.postgresql.fr/current/libpq-envars.html

https://dalibo.com/formations17

Page 18: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

nom_hote:port:nom_base:nom_utilisateur:mot_de_passe

Chacun des quatre premiers champs pourraient être une valeur littérale ou * (qui corre-spond à tout). La première ligne réalisant une correspondance pour les paramètres deconnexion sera utilisée (du coup, placez les entrées plus spécifiques en premier lorsquevous utilisez des jokers). Si une entrée a besoin de contenir * ou \, échappez ce caractèreavec \. Un nom d’hôte localhost correspond à la fois aux connexions host (TCP) et auxconnexions local (socket de domaine Unix) provenant de la machine locale.

Les droits sur .pgpass doivent interdire l’accès aux autres et au groupe ; réalisez ceciavec la commande chmod 0600 ~/.pgpass. Attention : si les droits du fichier sont moinsstricts, le fichier sera ignoré.Les droits du fichier ne sont actuellement pas vérifiés sur Microsoft Windows.

1.3 LA CONSOLE PSQL

• Un outil simple pour– les opérations courantes– les tâches de maintenance– les tests

postgres$ psqlbase=#

La console psql permet d’effectuer l’ensemble des tâches courantes d’un utilisateurde bases de données. Si ces tâches peuvent souvent être effectuées à l’aide d’unoutil graphique, la console présente l’avantage de pouvoir être utilisée en l’absenced’environnement graphique ou de scripter les opérations à effectuer sur la base dedonnées.

Nous verrons également qu’il est possible d’administrer la base de données depuis cetteconsole.

Enfin, elle permet de tester l’activité du serveur, l’existence d’une base, la présence d’unlangage de programmation…

18

Page 19: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.3.1 OBTENIR DE L'AIDE ET QUITTER

• Obtenir de l’aide sur les commandes internes psql– \? [motif]

• Obtenir de l’aide sur les ordres SQL– \h [motif]

• Quitter– \q ou ctrl-D– quit ou exit (v11)

\h [NOM] affiche l’aide en ligne des commandes SQL. Sans argument, la liste des com-mandes disponibles est affichée. La version 12 ajoute en plus l’URL vers la page webdocumentant cette commande.

Exemple :

postgres=# \h savepoint

Command: SAVEPOINTDescription: define a new savepoint within the current transactionSyntax:SAVEPOINT savepoint_name

URL: https://www.postgresql.org/docs/13/sql-savepoint.html

\q ou Ctrl-D permettent de quitter la console. Depuis la version 11, il est aussi possibled’utiliser quit ou exit.

1.3.2 GESTION DE LA CONNEXION

• Modifier le mot de passe d’un utilisateur– \password [USERNAME]

• Obtenir des informations sur la connexion courante:– \conninfo

• Se connecter à une autre base– \connect {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}– \c {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}

• Spécifier le jeu de caractère– \encoding [ENCODING]

\encoding [ENCODAGE] permet, en l’absence d’argument, d’afficher l’encodage du client.En présence d’un argument, il permet de préciser l’encodage du client.

https://dalibo.com/formations19

Page 20: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Exemple :

postgres=# \encodingUTF8postgres=# \encoding LATIN9postgres=# \encodingLATIN9

\c permet de changer d’utilisateur et/ou de base de données sans quitter le client.

Exemple :

CREATE DATABASE formation;CREATE DATABASE prod;CREATE USER stagiaire1;CREATE USER stagiaire2;CREATE USER admin;

postgres=# \c formation stagiaire1

You are now connected to database "formation" as user "stagiaire1".

formation=> \c - stagiaire2

You are now connected to database "formation" as user "stagiaire2".

formation=> \c prod admin

You are now connected to database "prod" as user "admin".

prod=> \conninfo

You are connected to database "prod" as user "admin"on host "localhost" (address "::1") at port "5412".

Le gros intérêt de \password est d’envoyer le mot de passe chiffré au serveur. Ainsi,même si les traces contiennent toutes les requêtes SQL exécutées, il est impossible deretrouver les mots de passe via le fichier de traces. Ce n’est pas le cas avec un CREATEUSER ou un ALTER USER (à moins de chiffrer soi-même le mot de passe).

20

Page 21: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.3.3 GESTION DE L'ENVIRONNEMENT SYSTÈME

• Chronométrer les requêtes– \timing

• Exécuter une commande OS– \! [COMMAND]

• Changer de répertoire courant– \cd [DIR]

\timing active le chronométrage des commandes. Il accepte un argument indiquant lanouvelle valeur (soit on, soit off). Sans argument, la valeur actuelle est basculée.

\! [COMMANDE] ouvre un shell interactif en l’absence d’argument ou exécute la com-mande indiquée.

\cd permet de changer de répertoire courant. Cela peut s’avérer utile lors de lectures ouécritures sur disque.

1.3.4 CATALOGUE SYSTÈME: OBJETS UTILISATEURS

• Lister les bases de données– \l

• Lister les schémas– \dn

• Lister uniquement les tables|index|séquences|vues|vues matérialisées [systèmes]– \d{t|i|s|v|m}[S][+] [motif]

• Lister les fonctions– \df[+] [motif]

• Lister les fonctions d’agrégats– \da [motif]

Ces commandes permettent d’obtenir des informations sur les objets utilisateurs: tables,index, vues, séquences, fonctions, agrégats, etc. stockés dans la base de données.

Pour les commandes qui acceptent un motif, celui-ci permet de restreindre les résultatsretournés à ceux dont le nom d’opérateur correspond au motif précisé.

\l[+] dresse la liste des bases de données sur le serveur. Avec +, les commentaires et lestailles des bases sont également affichés.

\d[+] [motif] permet d’afficher la liste des tables de la base lorsqu’aucun motif n’estindiqué. Dans le cas contraire, la table précisée est décrite. Le + permet d’afficher égale-

https://dalibo.com/formations21

Page 22: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

ment les commentaires associés aux tables ou aux lignes de la table, ainsi que la taille dechaque table.

\db [motif] dresse la liste des tablespaces actifs sur le serveur.

\d{t|i|s|v}[S] [motif] permet d’afficher respectivement :

• la liste des tables de la base active ;• la liste des index ;• la liste des séquences ;• la liste des vues ;• la liste des tables systèmes.

\da dresse la liste des fonctions d’agrégats.

\df dresse la liste des fonctions.

Exemple :

postgres=# \c cave

You are now connected to database "cave" as user "postgres".

cave=# \d appel*

Table "public.appellation"Column | Type | Collation | Nullable | Default----------+---------+-----------+----------+----------------------------------------id | integer | | not null | nextval('appellation_id_seq'::regclass)libelle | text | | not null |region_id | integer | | |Indexes:

"appellation_pkey" PRIMARY KEY, btree (id)"appellation_libelle_key" UNIQUE CONSTRAINT, btree (libelle)

Foreign-key constraints:"appellation_region_id_fkey" FOREIGN KEY (region_id)

REFERENCES region(id) ON DELETE CASCADEReferenced by:

TABLE "vin" CONSTRAINT "vin_appellation_id_fkey"FOREIGN KEY (appellation_id) REFERENCES appellation(id) ON DELETE CASCADE

Sequence "public.appellation_id_seq"Type | Start | Minimum | Maximum | Increment | Cycles? | Cache

---------+-------+---------+------------+-----------+---------+-------integer | 1 | 1 | 2147483647 | 1 | no | 1Owned by: public.appellation.id

Index "public.appellation_libelle_key"Column | Type | Key? | Definition---------+------+------+------------

22

Page 23: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

libelle | text | yes | libelleunique, btree, for table "public.appellation"

Index "public.appellation_pkey"Column | Type | Key? | Definition--------+---------+------+------------id | integer | yes | idprimary key, btree, for table "public.appellation"

cave=# \da sum

List of aggregate functions  Schema   |Name| Result    | Argument    |      Description                               |    | data type | data types  |                                     -----------+----+-----------+-------------+-------------------------------------pg_catalog |sum | numeric   | bigint      | sum as numeric                   �

across all bigint input values      pg_catalog |sum | double  � | double    � | sum as float8                    �

 precision | precision   | across all float8 input values      pg_catalog |sum | bigint    | integer     | sum as bigint                    �

across all integer input values   pg_catalog |sum | interval  | interval    | sum as interval                  �

across all interval input values    pg_catalog |sum | money     | money       | sum as money                     �

across all money input values       pg_catalog |sum | numeric   | numeric     | sum as numeric                   �

across all numeric input values     pg_catalog |sum | real      | real        | sum as float4                    �

across all float4 input values      pg_catalog |sum | bigint    | smallint    | sum as bigint                    �

across all smallint input values    

cave=# \df public.*

                               List of functions Schema|     Name     | Result  � | Argument data types    | Type       |              | data type |                        |        -------+--------------+-----------+------------------------+------public | peuple_stock | bigint    | annee_debut integer, � | func       |              |           | annee_fin integer      |public | peuple_vin   | bigint    |                        | funcpublic | trous_stock  | bigint    |                        | funcpublic | trous_vin    | bigint    |                        | func

https://dalibo.com/formations23

Page 24: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.3.5 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

L’ensemble des informations concernant les objets, les utilisateurs, les procédures… sontaccessibles par des commandes internes débutant par \d.

Pour connaître les rôles stockés en base, la commande est \du (u pour user). Rappelonsqu’un rôle peut être aussi bien un utilisateur (si le rôle a le droit de LOGIN) qu’un grouped’utilisateurs, voire les deux à la fois.

Dans les versions antérieures à la 8.1, il n’y avait pas de rôles, et les groupes et lesutilisateurs étaient deux notions distinctes. Certaines commandes ont conservé le termede user, mais il s’agit bien de rôles dans tous les cas.

Les droits sont accessibles par les commandes \dp (p pour permissions) ou \z.

Dans cet exemple, le rôle admin devient membre du rôle système pg_signal_backend.

cave=# GRANT pg_signal_backend TO admin;GRANT ROLEcave=# \du

List of rolesRole name | Attributes | Member of------------+--------------------------------------+---------------------admin | | {pg_signal_backend}caviste | | {}postgres | Superuser, Create role, Create DB, |

| Replication, Bypass RLS | {}stagiaire1 | | {}stagiaire2 | | {}

cave=# GRANT SELECT ON TABLE region TO stagiaire2;GRANTcave=# GRANT ALL ON TABLE vin TO stagiaire1;GRANTcave=# GRANT SELECT (nombre) ON TABLE stock TO stagiaire2;

24

Page 25: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

GRANTcave=# \z

Access privileges| | | | Column |

Schema | Name | Type | Access privileges | privileges| Policies-------+------------------+--------+--------------------+-----------+---------+public |appellation |table | | |public |appellation_id_seq|sequence| | |public |contenant |table | | |public |contenant_id_seq |sequence| | |public |recoltant |table | | |public |recoltant_id_seq |sequence| | |public |region |table |caviste= | |

| | | arwdDxt/caviste +| || | |stagiaire2=r/caviste| |

public |region_id_seq |sequence| | |public |stock |table | | nombre: |

| | | |stagiaire2=|| | | |r/caviste |

public |type_vin |table | | |public |type_vin_id_seq |sequence| | |public |vin |table |caviste= | |

| | | arwdDxt/caviste +| || | |stagiaire1 | || | | arwdDxt/caviste | |

public |vin_id_seq |sequence| | |

La commande \ddp permet de connaître les droits accordés par défaut à un utilisateur surles nouveaux objets avec l’ordre ALTER DEFAULT PRIVILEGES.

cave=# ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO caviste;ALTER DEFAULT PRIVILEGEScave=# ALTER DEFAULT PRIVILEGES GRANT SELECT ON TABLES TO stagiaire1;ALTER DEFAULT PRIVILEGES

cave=# \ddp

Default access privilegesOwner | Schema | Type | Access privileges

----------+--------+-------+---------------------------postgres | | table | postgres=arwdDxt/postgres+

| | | stagiaire1=r/postgres +| | | caviste=arwdDxt/postgres

Enfin, la commande \drds permet d’obtenir la liste des paramètres appliqués spécifique-ment à un utilisateur ou une base de données.

cave=# ALTER ROLE admin SET maintenance_work_mem TO '2GB';

https://dalibo.com/formations25

Page 26: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

ALTER ROLEcave=# ALTER DATABASE cave SET work_mem TO '32MB';ALTER DATABASE

cave=# \drds

List of settingsRole | Database | Settings-------+----------+--------------------------admin | | maintenance_work_mem=2GB

| cave | work_mem=32MB

1.3.6 CATALOGUE SYSTÈME: TABLESPACES ET EXTENSIONS

• Lister les tablespaces– \db

• Lister les extensions– \dx

\db [motif] dresse la liste des tablespaces actifs sur le serveur.

postgres=# \! mkdir /tmp/tbs1postgres=# CREATE TABLESPACE ts1 LOCATION '/tmp/tbs1';CREATE TABLESPACE

postgres=# \db

List of tablespacesName | Owner | Location

------------+----------+-----------pg_default | postgres |pg_global | postgres |ts1 | postgres | /tmp/tbs1

\dx [motif] dresse la liste des extensions installées dans la base courante :

postgres=# CREATE EXTENSION pg_stat_statements;CREATE EXTENSIONpostgres=# CREATE EXTENSION unaccent;CREATE EXTENSION

postgres=# \dx

List of installed extensionsName | Version | Schema | Description

--------------------+---------+------------+----------------------------------pg_stat_statements | 1.8 | public | track execution statistics

26

Page 27: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

of all SQL statements executedplpgsql | 1.0 | pg_catalog | PL/pgSQL procedural languageunaccent | 1.1 | public | text search dictionary that

removes accents

1.3.7 CATALOGUE SYSTÈME: AUTRES OBJETS

• Types, domaines et opérateurs– \dD[S+]– \dT[S+]– \do [motif]

• Objets FTS– \dF [motif]– \dFd [motif]– \dFt [motif]– \dFp [motif]

• Conversions– \dc [motif]– \dC [motif]

• Classes et familles d’opérateur– \dAc [motif]– \dAf [motif]

Types, domaines et opérateurs

\dD [motif] dresse la liste de tous les domaines disponibles.

\dT[+] [motif] dresse la liste des types de données disponibles.

\do [motif] dresse la liste des opérateurs disponibles.

Exemple :

postgres=# \x onExpanded display is on.

postgres=# \dD

List of domains-[ RECORD 1 ]------------------------------Schema | publicName | code_postal_francaisType | textCollation |

https://dalibo.com/formations27

Page 28: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Nullable |Default |Check | CHECK (VALUE ~ '^\d{5}$'::text)

postgres=# \dT+ bigint

List of data types-[ RECORD 1 ]-----+----------------------------------Schema | pg_catalogName | bigintInternal name | int8Size | 8Elements |Owner | postgresAccess privileges |Description | ~18 digit integer, 8-byte storage

Objets FTS

\dF [motif] dresse la liste des configurations de la recherche plein texte.

\dFd[+] [motif] dresse la liste des dictionnaires de la recherche plein texte. Ajouter +permet d’afficher également le modèle et les options d’initialisation des dictionnaires.

\dFt[+] [motif] dresse la liste des modèles de la recherche plein texte. Ajouter + per-met d’afficher également la fonction d’initialisation et celle de récupération des lexemes.

\dFp [motif] dresse la liste des analyseurs de la recherche plein texte.

Conversions

\dc dresse la liste des conversions de jeux de caractères.

\dC dresse la liste des conversions de type de données disponibles.

Exemple

postgres=# \dc iso_8859_15_to_utf8

List of conversionsSchema | Name | Source | Destination | Default?

------------+---------------------+--------+-------------+----------pg_catalog | iso_8859_15_to_utf8 | LATIN9 | UTF8 | yes

postgres=# \dC

List of castsSource type | Target type | Function | Implicit?

-------------------+-------------------+--------------------+---------------"char" | character | bpchar | in assignment"char" | character varying | text | in assignment"char" | integer | int4 | no

28

Page 29: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

"char" | text | text | yesbigint | bit | bit | nobigint | double precision | float8 | yes[...]

1.3.8 VISUALISER LE CODE DES OBJETS

• Code d’une vue– \sv

• Code d’une procédure stockée– \sf

Ceci permet de visualiser le code de certains objets sans avoir besoin de l’éditer. Parexemple :

postgres=# \c cave

You are now connected to database "cave" as user "postgres".

cave=# \sf trous_vinCREATE OR REPLACE FUNCTION public.trous_vin()RETURNS bigintLANGUAGE plpgsql

AS $function$DECLAREvin_total integer;echantillon integer;v_vin_id integer;v_tuples bigint := 0;v_annee integer;

BEGIN

-- on compte le nombre de tuples dans vinSELECT COUNT(*) FROM vin INTO vin_total;RAISE NOTICE '% vins disponibles', vin_total;

-- on calcule la taille de l'échantillon a-- supprimer de la table vinSELECT ROUND(vin_total / 10) INTO echantillon;RAISE NOTICE 'taille de l''echantillon %', echantillon;

-- on fait une boucle correspondant à 10% des tuples-- de la table vinFOR v_tuples IN 1 .. echantillon loop

https://dalibo.com/formations29

Page 30: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

-- éelection d'identifiant, au hasardv_vin_id := ROUND(random() * vin_total);

-- si le tuple est déjà effacé, ce n'est pas graveDELETEFROM stockWHERE vin_id = v_vin_id;

DELETEFROM vinFROM id = v_vin_id;

IF (((v_tuples % 100) = 0) or (v_tuples = echantillon)) THENRAISE NOTICE 'vin : % sur % echantillon effaces', v_tuples, echantillon;

END IF;

END LOOP; --fin boucle v_tuples

RETURN echantillon;

END;$function$

1.3.9 EXÉCUTER DES REQUÊTES

• Exécuter une requête– terminer une requête par ;– ou par \g– ou encore par \gx

• Rappel des requêtes:– flèche vers le haut– ctrl-R suivi d’un extrait de texte représentatif

Sauf si psql est exécuté avec l’option -S (mode single-line), toutes les requêtes SQLdoivent se terminer par ; ou, pour marquer la parenté de PostgreSQL avec Ingres, \g.

En version 10, il est aussi possible d’utiliser \gx pour avoir l’action conjuguée de \g (ré-exécution de la requête) et de \x (affichage étendu).

La console psql, lorsqu’elle est compilée avec la bibliothèque libreadline ou la biblio-thèque libedit (cas des distributions Linux courantes), dispose des mêmes possibilitésde rappel de commande que le shell bash.

30

Page 31: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

Exemple

cave=# \c postgres

You are now connected to database "postgres" as user "postgres".

postgres=# SELECT * FROM pg_tablespace LIMIT 5;

oid | spcname | spcowner | spcacl | spcoptions-------+------------+----------+--------+------------1663 | pg_default | 10 | |1664 | pg_global | 10 | |16502 | ts1 | 10 | |

postgres=# SELECT * FROM pg_tablespace LIMIT 5\g

oid | spcname | spcowner | spcacl | spcoptions-------+------------+----------+--------+------------1663 | pg_default | 10 | |1664 | pg_global | 10 | |16502 | ts1 | 10 | |

postgres=# \g

oid | spcname | spcowner | spcacl | spcoptions-------+------------+----------+--------+------------1663 | pg_default | 10 | |1664 | pg_global | 10 | |16502 | ts1 | 10 | |

postgres=# \gx

-[ RECORD 1 ]----------oid | 1663spcname | pg_defaultspcowner | 10spcacl |spcoptions |-[ RECORD 2 ]----------oid | 1664spcname | pg_globalspcowner | 10spcacl |spcoptions |-[ RECORD 3 ]----------oid | 16502spcname | ts1spcowner | 10spcacl |spcoptions |

https://dalibo.com/formations31

Page 32: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.3.10 AFFICHER LE RÉSULTAT D'UNE REQUÊTE

• Affichage par paginateur si l’écran ne suffit pas• \x pour afficher un champ par ligne• Paginateur modifiable

– set PAGER='less -S'– \setenv PAGER 'pspg'– pspga

En mode interactif, psql cherche d’abord à afficher directement le résultat :

postgres=# SELECT relname,reltype, relchecks, oid,oid FROM pg_class LIMIT 3;

relname | reltype | relchecks | oid | oid-------------------+---------+-----------+-------+-------pg_statistic | 11319 | 0 | 2619 | 2619t3 | 16421 | 0 | 16419 | 16419capitaines_id_seq | 16403 | 0 | 16402 | 16402t1 | 16415 | 0 | 16413 | 16413t2 | 16418 | 0 | 16416 | 16416

S’il y a trop de colonnes, on peut préférer n’avoir qu’un champ par ligne grâce au commu-tateur \x :

postgres=# \x on

Expanded display is on.

postgres=# SELECT relname,reltype, relchecks, oid,oid FROM pg_class LIMIT 3;

-[ RECORD 1 ]----------------relname | pg_statisticreltype | 11319relchecks | 0oid | 2619oid | 2619-[ RECORD 2 ]----------------relname | t3reltype | 16421relchecks | 0oid | 16419oid | 16419-[ RECORD 3 ]----------------relname | capitaines_id_seqreltype | 16403relchecks | 0

ahttps://github.com/okbob/pspg

32

Page 33: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

oid | 16402oid | 16402

\x on et \x off sont alternativement appelés si l’on tape plusieurs fois \x. \x autodélègue à psql la décision du meilleur affichage, en général à bon escient.

S’il n’y a pas la place à l’écran, psql appelle le paginateur par défaut du système. Il s’agitsouvent de more, parfois de less. Ce dernier est bien plus puissant, permet de parcourirle résultat en avant et en arrière, avec la souris, de chercher une chaîne de caractères, detronquer les lignes trop longues (avec l’option -S) pour naviguer latéralement.

Le paramétrage du paginateur s’effectue par des variables d’environnement :

export PAGER='less -S'psql

ou :

PAGER='less -S' psql

ou dans psql directement, ou .psqlrc :

\setenv PAGER 'less -S'

Mais less est généraliste. Un paginateur dédié à l’affichage de résultats de requêtes a étérécemment développé par Pavel Stěhule3 et est fourni par les principales distributions.pspg permet de naviguer dans les lignes avec la souris en figeant les entêtes ou quelquescolonnes ; de poser des signets sur des lignes ; de sauvegarder les lignes. (Pour plusde détail, voir cette présentation4 et la page Github du projet5 ). La mise en place estsimilaire :

\setenv PAGER 'pspg'

3http://okbob.blogspot.fr/2017/07/i-hope-so-every-who-uses-psql-uses-less.html4http://blog-postgresql.verite.pro/2017/11/21/test-pspg.html5https://github.com/okbob/pspg

https://dalibo.com/formations33

Page 34: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.3.11 EXÉCUTER LE RÉSULTAT D'UNE REQUÊTE

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

• Apparaît en 9.6

Parfois, une requête permet de créer des requêtes sur certains objets. Par exemple, sinous souhaitons exécuter un VACUUM sur toutes les tables du schéma public, nous allonsrécupérer la liste des tables avec cette requête :

cave=# SELECT nspname, relname FROM pg_class cJOIN pg_namespace n ON n.oid = c.relnamespaceWHERE n.nspname = 'public' AND c.relkind = 'r';

nspname | relname---------+-------------public | type_vinpublic | contenantpublic | recoltantpublic | regionpublic | appellationpublic | vinpublic | stock

Plutôt que d’éditer manuellement cette liste de tables pour créer les ordres SQL néces-saires, autant modifier la requête pour qu’elle prépare elle-même les ordres SQL :

cave=# SELECT 'VACUUM ' || quote_ident(nspname) || '.' || quote_ident(relname)FROM pg_class cJOIN pg_namespace n ON n.oid = c.relnamespaceWHERE n.nspname = 'public' AND c.relkind = 'r';

?column?---------------------------VACUUM public.type_vinVACUUM public.contenantVACUUM public.recoltantVACUUM public.regionVACUUM public.appellationVACUUM public.vinVACUUM public.stock

Une fois que nous avons vérifié la validité des requêtes SQL, il ne reste plus qu’à lesexécuter. C’est ce que permet la commande \gexec :

postgres=# \gexec

VACUUMVACUUM

34

Page 35: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

VACUUMVACUUMVACUUMVACUUMVACUUM

1.3.12 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

Après avoir exécuté une requête, ou même à la place de l’exécution, il est possible deconnaître le nom des colonnes en résultat ainsi que leur type de données.

Requête :

SELECT nspname, relnameFROM pg_class cJOIN pg_namespace n ON n.oid = c.relnamespaceWHERE n.nspname = 'public' AND c.relkind = 'r';

Description des colonnes :

postgres=# \gdesc

Column | Type---------+------nspname | namerelname | name

Ou sans exécution :

postgres=# SELECT * FROM generate_series (1, 1000) \gdesc

Column | Type-----------------+---------generate_series | integer

https://dalibo.com/formations35

Page 36: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.3.13 MANIPULER LE TAMPONDE REQUÊTES

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

• Exécuter le contenu du tampon– \g [FICHIER]

• Afficher le tampon– \p

• Sauvegarder le contenu du tampon– \w [FICHIER]

• Supprimer le contenu du tampon– \r

\e [FICHIER] édite le tampon de requête courant ou le fichier indiqué à l’aide d’un édi-teur externe, éditeur désigné avec les variables d’environnement EDITOR ou PSQL_EDITORnotamment. C’est généralement par défaut une variante de vi mais n’importe quel édi-teur fait l’affaire :

PSQL_EDITOR=nano

ou dans psql ou dans le .psqlrc :

\setenv PSQL_EDITOR 'gedit'

\g [FICHIER] envoie le tampon de requête au serveur et, en présence d’un argument, lerésultat au fichier indiqué.

\p affiche le contenu du tampon de requête.

\r supprime le contenu du tampon de requête.

\w FICHIER provoque l’écriture du tampon de requête dans le fichier indiqué.

\ev [NOMVUE] édite la vue indiquée. Sans argument, entre en mode édition avec la re-quête de déclaration d’une vue. Cette méta-commande est disponible à partir de la ver-sion 9.6.

\ef [NOMFONCTION] édite la fonction indiquée. Sans argument, entre en mode éditionavec la requête de déclaration d’une fonction.

\s [FICHIER] affiche l’historique des commandes effectuées lors de la session, enl’absence d’argument. Si un fichier est précisé, l’historique des commandes y estsauvegardé.

36

Page 37: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.3.14 ENTRÉES/SORTIES

• Charger et exécuter un script SQL– \i FICHIER

• Rediriger la sortie dans un fichier– \o FICHIER

• Écrire un texte sur la sortie standard– \echo texte...

• Écrire un texte dans le fichier– \qecho texte...

• Écrire un texte sur la sortie des erreurs– \warn texte...

\i FICHIER lance l’exécution des commandes placées dans le fichier passé en argument.\ir fait la même chose sauf que le chemin est relatif au chemin courant.

\o [FICHIER | |COMMANDE] envoie les résultats de la requête vers le fichier indiqué ouvers la commande UNIX au travers du tube.

Exemple :

postgres=# \o |a2pspostgres=# SELECT ... ;

\echo [TEXTE] affiche le texte passé en argument sur la sortie standard.

\qecho [TEXTE] offre le même fonctionnement que \echo [TEXTE], à ceci près que lasortie est dirigée sur la sortie des requêtes (fixée par \o [ FICHIER]) et non sur la sortiestandard.

1.3.15 VARIABLES INTERNES PSQL

• Positionner des variables internes– \set [NOM [VALEUR]]

• Invalider une variable interne– \unset NOM

• Variables internes usuelles– ON_ERROR_STOP : on ou off– ON_ERROR_ROLLBACK : on, off ou interactive– AUTOCOMMIT : on ou off– ROW_COUNT : nombre de lignes renvoyées par la dernière requête (v11)– ERROR : true si dernière requête en erreur (v11)

https://dalibo.com/formations37

Page 38: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

• Ne pas confondre avec SET (au niveau du serveur) !

Les variables déclarées avec \set sont positionnées au niveau de psql, outil client. Il nefaut pas confondre avec les paramètres transmis au serveur (avec SET).

\set [NOM [VALEUR]] affiche les variables internes lorsqu’il est utilisé sans argument.Avec un argument, il permet d’initialiser une variable interne.

La liste des variables prédéfinie est disponible dans la documentation de psql6 .

Exemple :

postgres=# \setAUTOCOMMIT = 'on'COMP_KEYWORD_CASE = 'preserve-upper'DBNAME = 'cave'ECHO = 'none'ECHO_HIDDEN = 'off'ENCODING = 'UTF8'ERROR = 'false'FETCH_COUNT = '0'HIDE_TABLEAM = 'off'HISTCONTROL = 'none'HISTSIZE = '500'HOST = '/tmp'IGNOREEOF = '0'LASTOID = '0'LAST_ERROR_MESSAGE = ''LAST_ERROR_SQLSTATE = '00000'ON_ERROR_ROLLBACK = 'off'ON_ERROR_STOP = 'off'PORT = '5432'PROMPT1 = '%/%R%x%# 'PROMPT2 = '%/%R%x%# 'PROMPT3 = '>> 'QUIET = 'off'ROW_COUNT = '1'SERVER_VERSION_NAME = '13.2 (Ubuntu 13.2-1.pgdg20.04+1)'SERVER_VERSION_NUM = '130002'SHOW_CONTEXT = 'errors'SINGLELINE = 'off'SINGLESTEP = 'off'SQLSTATE = '00000'USER = 'postgres'VERBOSITY = 'default'VERSION = 'PostgreSQL 13.2 (Ubuntu 13.2-1.pgdg20.04+1) on x86_64-pc-linux-gnu,

6https://docs.postgresql.fr/current/app-psql.html#app-psql-variables

38

Page 39: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit'VERSION_NAME = '13.2 (Ubuntu 13.2-1.pgdg20.04+1)'VERSION_NUM = '130002'

Les variables ON_ERROR_ROLLBACK et ON_ERROR_STOP sont discutées dans la partie relativeà la gestion des erreurs.

La version 11 ajoute quelques variables internes. ROW_COUNT indique le nombre de lignesde résultat de la dernière requête exécutée :

postgres=# SELECT * FROM pg_namespace;

nspname | nspowner | nspacl--------------------+----------+-------------------------------------pg_toast | 10 |pg_temp_1 | 10 |pg_toast_temp_1 | 10 |pg_catalog | 10 | {postgres=UC/postgres,=U/postgres}public | 10 | {postgres=UC/postgres,=UC/postgres}information_schema | 10 | {postgres=UC/postgres,=U/postgres}

postgres=# \echo :ROW_COUNT6

alors que ERROR est un booléen indiquant si la dernière requête était en erreur ou pas :

postgres=# CREATE TABLE t1(id integer);CREATE TABLEpostgres=# CREATE TABLE t1(id integer);

ERROR: relation "t1" already exists

postgres=# \echo :ERRORtruepostgres=# CREATE TABLE t2(id integer);CREATE TABLEpostgres=# \echo :ERRORfalse

https://dalibo.com/formations39

Page 40: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.3.16 VARIABLES UTILISATEUR PSQL

• Définir une variable utilisateur– \set [NOM [VALEUR]]

• Stockage du résultat d’une requête– \gset [PREFIX]

• Le résultat de la requête doit être une simple valeur

En dehors des variables internes évoquées dans le chapitre précédent, il est possible à unutilisateur de psql de définir ses propres variables.

-- initialiser avec une constante\set active 'y'\echo :activey-- initialiser avec le résultat d'une commande système\set uptime `uptime`\echo :uptime

09:38:58 up 53 min, 1 user, load average: 0,12, 0,07, 0,07

Il est possible de stocker le résultat d’une requête dans une variable pour sa réutilisationdans un script avec la commande \gset :

SELECT now() AS "curdate" \gset\echo :curdate

2020-08-16 10:53:51.795582+02

La valeur retournée par la requête doit être unique.

SELECT * FROM pg_namespace \gset

more than one row returned for \gset

Le nom de la variable est défini par le nom de la colonne ou de son alias. Il est possibleaussi de donner un préfixe au nom de la variable en le spécifiant à la suite de la commande\gset.

SELECT now() AS "curdate" \gset part1_\echo :part1_curdate

2020-08-16 10:54:20.484344+02

Le chapitre suivant donne un exemple plus complet de son utilisation.

40

Page 41: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.3.17 TESTS CONDITIONNELS

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

Ces quatre instructions permettent de tester la valeur de variables psql, ce qui permetd’aller bien plus loin dans l’écriture de scripts SQL.

Il est à noter que, même si cette fonctionnalité apparaît avec PostgreSQL 10, elle estquand même disponible si le serveur n’est pas en version 10 vu qu’elle est liée au clientet non pas au serveur.

Par exemple, si on souhaite savoir si on se trouve sur un serveur standby ou sur un serveurprimaire, il suffit de configurer la variable PROMPT1 à partir du résultat de l’interrogationde la fonction pg_is_in_recovery(). Pour cela, il faut enregistrer ce code dans le fichier.psqlrc :

SELECT pg_is_in_recovery() as est_standby \gset\if :est_standby

\set PROMPT1 'standby %x$ '\else

\set PROMPT1 'primaire %x$ '\endif

Puis, en lançant psql sur un serveur primaire, on obtient :

psql (13.0)Type "help" for help.

primaire $

alors qu’on obtient sur un serveur secondaire :

psql (13.0)Type "help" for help.

standby $

https://dalibo.com/formations41

Page 42: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.3.18 PERSONNALISER PSQL

• psql est personnalisable• Au démarrage, psql lit dans le ${HOME}

– .psqlrc-X.Y– .psqlrc-X– .psqlrc

• .psqlrc contient des méta-commandes \set– \set ON_ERROR_ROLLBACK interactive– \set PROMPT1 '%M:%> %n@%/%R%#%x'

La console psql est personnalisable par le biais de plusieurs variables internes. Il est possi-ble de pérenniser ces personnalisations par le biais d’un fichier .psqlrc. Modifier l’inviteest utile pour toujours savoir où et comment l’on est connecté. Tous les détails sont dansla documentation7 .

Exemple:

$ cat .psqlrc\timing\set ON_ERROR_ROLLBACK interactive$ psql postgresTiming is on.psql (13.0)Type "help" for help.

postgres=# SELECT relname FROM pg_class LIMIT 1;

relname----------------pg_toast_16401

(1 row)

Time: 0.580 ms

7https://docs.postgresql.fr/current/app-psql.html#app-psql-prompting

42

Page 43: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.4 ÉCRITURE DE SCRIPTS SHELL

• Script SQL• Script Shell• Exemple sauvegarde

1.4.1 EXÉCUTER UN SCRIPT SQL AVEC PSQL

• Exécuter un seul ordre SQL– -c "ordre SQL"

• Spécifier un script SQL en ligne de commande– -f nom_fichier.sql

• Possible de les spécifier plusieurs fois– exécutés dans l’ordre d’apparition– à partir de la version 9.6

• Charger et exécuter un script SQL depuis psql– \i nom_fichier.sql

L’option -c permet de spécifier la requête SQL en ligne de commande. Lorsque ceparamètre est utilisé, il implique automatiquement l’option --no-psqlrc jusqu’à laversion 9.6.

Il est cependant souvent préférable de les enregistrer dans des fichiers si on veut lesexécuter plusieurs fois sans se tromper. L’option -f est très utile dans ce cas.

1.4.2 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 ou --single-transaction

Par défaut, psql est en mode auto-commit, c’est-à-dire que tous les ordres SQL sontautomatiquement validés après leur exécution.

https://dalibo.com/formations43

Page 44: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Pour exécuter une suite d’ordres SQL dans une seule et même transaction, il faut soitouvrir explicitement une transaction avec BEGIN; et la valider avec COMMIT; ou l’annuleravec ROLLBACK;.

Une autre possibilité est d’utiliser psql -1 ou psql --single-transation afin d’ouvrirune transaction avant le début de l’exécution du script et de faire un COMMIT implicite à lafin de l’exécution du script, ou un ROLLBACK explicite le cas échéant. La présence d’ordresBEGIN, COMMIT ou ROLLBACK modifiera ce comportement en conséquence.

1.4.3 ÉCRIRE UN SCRIPT SQL

• Attention à l’encodage des caractères– \encoding– SET client_encoding

• Écriture des requêtes• Écrire du code procédural avec DO (bloc anonyme, une transaction)

\encoding [ENCODAGE] permet, en l’absence d’argument, d’afficher l’encodage du client.En présence d’un argument, il permet de préciser l’encodage du client.

Exemple :

postgres=# \encodingUTF8postgres=# \encoding LATIN9postgres=# \encodingLATIN9

Cela a le même effet que d’utiliser l’ordre SQL SET client_encoding TO LATIN9;.

Une requête se termine par le caractère ; (ou par \g mais qui est peu recommandé carnon standard).

En terme de présentation, il est commun d’écrire les mots clés SQL en majuscules etd’écrire les noms des objets et fonctions manipulés dans les requêtes en minuscule. Lelangage SQL est un langage aumême titre que Java ou PHP, la présentation est importantepour la lisibilité des requêtes.

Exemple :

INSERT INTO appellation (id, libelle, region_id) VALUES (1, 'Ajaccio', 1);INSERT INTO appellation (id, libelle, region_id) VALUES (2, 'Aloxe-Corton', 2);INSERT INTO appellation (id, libelle, region_id) VALUES

(3, 'Alsace Chasselas ou Gutedel', 3);

44

Page 45: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

SELECT v.id AS id_vin, a.libelle, r.nom, r.adresseFROM vin vJOIN appellation a

ON (v.appellation_id = a.id)JOIN recoltant r

ON (v.recoltant_id = r.id)WHERE libelle = :'appellation';

Écrire du code procédural avec DO permet l’exécution d’un bloc de code anonyme,autrement dit une fonction temporaire.

Le bloc de code est traité comme le corps d’une fonction sans paramètre et renvoyantvoid. Il est analysé et exécuté une seule fois.

Exemple :

Ajouter une colonne status dans des tables de traces.

DO $$DECLARE r record;BEGIN

FOR r IN SELECT table_schema, table_name FROM information_schema.tablesWHERE table_type = 'BASE TABLE' AND table_schema = 'public'AND table_name ~ '^logtrace_20.*'

LOOPEXECUTE 'ALTER TABLE ' || quote_ident(r.table_schema) || '.'

|| quote_ident(r.table_name) ||' ADD COLUMN status text DEFAULT ''NON TRAITE''';

END LOOP;END$$;

Noter que ce bloc constitue une transaction unique. Il n’est pas possible d’effectuer desCOMMIT/ROLLBACK au sein d’un bloc avant la version 11.

1.4.4 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 variablepsql -v VARIABLE=valeur

https://dalibo.com/formations45

Page 46: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

psql permet de manipuler des variables internes personnalisées dans les scripts. Cesvariables peuvent être particulièrement utiles pour passer des noms d’objets ou destermes à utiliser dans une requête par le biais des options de ligne de commande (-vvariable=valeur).

Noter la position des guillemets quand la variable est une chaîne de caractères.

Exemple :

psql cave -U caviste

cave=# \set appellation 'Alsace Gewurztraminer'

cave=# \setAUTOCOMMIT = 'on'COMP_KEYWORD_CASE = 'preserve-upper'DBNAME = 'cave'ECHO = 'none'ECHO_HIDDEN = 'off'ENCODING = 'UTF8'ERROR = 'false'FETCH_COUNT = '0'HIDE_TABLEAM = 'off'HISTCONTROL = 'none'HISTSIZE = '500'HOST = '/tmp'IGNOREEOF = '0'LASTOID = '0'LAST_ERROR_MESSAGE = 'relation "t1" already exists'LAST_ERROR_SQLSTATE = '42P07'ON_ERROR_ROLLBACK = 'off'ON_ERROR_STOP = 'off'PORT = '5413'PROMPT1 = '%/%R%x%# 'PROMPT2 = '%/%R%x%# 'PROMPT3 = '>> 'QUIET = 'off'ROW_COUNT = '1'SERVER_VERSION_NAME = '13beta3'SERVER_VERSION_NUM = '130000'SHOW_CONTEXT = 'errors'SINGLELINE = 'off'SINGLESTEP = 'off'SQLSTATE = '00000'USER = 'postgres'VERBOSITY = 'default'VERSION = 'PostgreSQL 13beta3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 10.2.1 20200723(Red Hat 10.2.1-1), 64-bit'

46

Page 47: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

VERSION_NAME = '13beta3'VERSION_NUM = '130000'appellation = 'Alsace Gewurztraminer'

cave=# SELECT v.id AS id_vin, a.libelle, r.nom, r.adressecave-# FROM vin vcave-# JOIN appellation acave-# ON (v.appellation_id = a.id)cave-# JOIN recoltant rcave-# ON (v.recoltant_id = r.id)cave-# WHERE libelle = :'appellation';

id_vin | libelle | nom | adresse--------+-----------------------+---------------------------+--------------

10 | Alsace Gewurztraminer | Mas Daumas Gassac | 34150 Aniane11 | Alsace Gewurztraminer | Mas Daumas Gassac | 34150 Aniane12 | Alsace Gewurztraminer | Mas Daumas Gassac | 34150 Aniane

[...](20 rows)

cave=# \prompt appellationAjacciocave=# SELECT v.id AS id_vin, a.libelle, r.nom, r.adresse

FROM vin vJOIN appellation a

ON (v.appellation_id = a.id)JOIN recoltant r

ON (v.recoltant_id = r.id)WHERE libelle = :'appellation';

id_vin | libelle | nom | adresse--------+---------+---------------------------+-------------

1 | Ajaccio | Mas Daumas Gassac | 34150 Aniane2 | Ajaccio | Mas Daumas Gassac | 34150 Aniane3 | Ajaccio | Mas Daumas Gassac | 34150 Aniane

[...](20 rows)

cave=# \q

$ cat cave2.sqlSELECT v.id AS id_vin, a.libelle, r.nom, r.adresseFROM vin vJOIN appellation a

ON (v.appellation_id = a.id)JOIN recoltant r

ON (v.recoltant_id = r.id)WHERE libelle = :'appellation';

https://dalibo.com/formations47

Page 48: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

$ psql cave -f cave2.sql -v appellation='Ajaccio'

id_vin | libelle | nom | adresse--------+---------+---------------------------+-------------

1 | Ajaccio | Mas Daumas Gassac | 34150 Aniane(...)

1.4.5 GESTION DES ERREURS

• Ignorer les erreurs dans une transaction– ON_ERROR_ROLLBACK

• Gérer des erreurs SQL en shell– ON_ERROR_STOP

La variable interne ON_ERROR_ROLLBACK n’a de sens que si elle est utilisée dans une trans-action. Elle peut prendre trois valeurs :

• off (défaut) ;• on ;• interactive.

Lorsque ON_ERROR_ROLLBACK est à on, psql crée un SAVEPOINT systématiquement avantd’exécuter une requête SQL. Ainsi, si la requête SQL échoue, psql effectue un ROLLBACKTO SAVEPOINT pour annuler cette requête. Sinon il relâche le SAVEPOINT.

Lorsque ON_ERROR_ROLLBACK est à interactive, le comportement de psql est le mêmeseulement si il est utilisé en interactif. Si psql exécute un script, ce comportement estdésactivé. Cette valeur permet de se protéger d’éventuelles fautes de frappe.

Utiliser cette option n’est donc pas neutre, non seulement en terme de performances,mais également en terme d’intégrité des données. Il ne faut donc pas utiliser cette optionà la légère.

Enfin, la variable interne ON_ERROR_STOP a deux objectifs : arrêter l’exécution d’un scriptlorsque psql rencontre une erreur et retourner un code retour shell différent de 0. Si cettevariable reste à off, psql retournera toujours la valeur 0 même s’il a rencontré une erreurdans l’exécution d’une requête. Une fois activée, psql retournera un code d’erreur 3 poursignifier qu’il a rencontré une erreur dans l’exécution du script.

L’exécution d’un script qui comporte une erreur retourne le code 0, signifiant que psql apu se connecter à la base de données et exécuté le script :

$ psql -f script_erreur.sql postgrespsql:script_erreur.sql:1: ERROR: relation "vin" does not exist

48

Page 49: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

LINE 1: SELECT * FROM vin;^

$ echo $?0

Lorsque la variable ON_ERROR_STOP est activée, psql retourne un code erreur 3, signifiantqu’il a rencontré une erreur :

$ psql -v ON_ERROR_STOP=on -f script_erreur.sql postgrespsql:script_erreur.sql:1: ERROR: relation "vin" does not existLINE 1: SELECT * FROM vin;

^$ echo $?3

psql retourne les codes d’erreurs suivant au shell :

• 0 au shell s’il se termine normalement ;• 1 s’il y a eu une erreur fatale de son fait (pas assez de mémoire, fichier introuvable) ;• 2 si la connexion au serveur s’est interrompue ou arrêtée ;• 3 si une erreur est survenue dans un script et si la variable ON_ERROR_STOP a été

initialisée.

1.4.6 FORMATAGE DES RÉSULTATS

• Afficher des résultats non alignés– -A | --no-align

• Afficher uniquement les lignes– -t | --tuples-only

• Utiliser le format étendu– -x | --expanded

• Utiliser d’autres formats de sortie– -H | --html– --csv (à partir de la version 12)

• Positionner un attribut de tableau HTML– -T TEXT | --table-attr TEXT

-A impose une sortie non alignée des données.

Exemple :

postgres@serveur_pg:~$ psqlpostgres=# \l

https://dalibo.com/formations49

Page 50: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

List of databasesName | Owner | Encoding | Collate | Ctype | Access privileges

-----------+----------+----------+---------+-------+-----------------------b1 | postgres | UTF8 | C | C |cave | caviste | UTF8 | C | C |formation | postgres | UTF8 | C | C |postgres | postgres | UTF8 | C | C |template0 | postgres | UTF8 | C | C | =c/postgres +

| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | C | C | =c/postgres +

| | | | | postgres=CTc/postgres

postgres@serveur_pg:~$ psql -A

postgres=# \l

List of databasesName|Owner|Encoding|Collate|Ctype|Access privilegesb1|postgres|UTF8|C|C|cave|caviste|UTF8|C|C|formation|postgres|UTF8|C|C|postgres|postgres|UTF8|C|C|template0|postgres|UTF8|C|C|=c/postgrespostgres=CTc/postgrestemplate1|postgres|UTF8|C|C|=c/postgrespostgres=CTc/postgres

-H impose un affichage HTML du contenu des tables.

Exemple :

postgres@serveur_pg:~$ psql -H

postgres=# \l

<table border="1"><caption>List of databases</caption><tr><th align="center">Name</th><th align="center">Owner</th><th align="center">Encoding</th><th align="center">Collate</th><th align="center">Ctype</th><th align="center">Access privileges</th>

</tr>(...)<tr valign="top"><td align="left">template1</td><td align="left">postgres</td><td align="left">UTF8</td>

50

Page 51: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

<td align="left">C</td><td align="left">C</td><td align="left">=c/postgres<br />

postgres=CTc/postgres</td></tr>

</table><p>(7 rows)<br /></p>

-T TEXT permet de définir les attributs des balises HTML de table. L’argument passéest ajouté dans la ligne <table border="1" ... >. Cette option n’a d’intérêt qu’utiliséeconjointement avec -H.

-t permet de n’afficher que les lignes, sans le nom des colonnes.

Exemple :

postgres@wanted:~$ psql -t

postgres=# \l

b1 | postgres | UTF8 | C | C |cave | caviste | UTF8 | C | C |formation | postgres | UTF8 | C | C |postgres | postgres | UTF8 | C | C |template0 | postgres | UTF8 | C | C | =c/postgres +

| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | C | C | =c/postgres +

| | | | | postgres=CTc/postgres

-x provoque un affichage étendu des informations. Chaque ligne de la table est affichéeséparément sous la forme NOM | VALEUR.

Exemple :

$ psql -x

postgres=# \l

List of databases-[ RECORD 1 ]-----+----------------------Name | b1Owner | postgresEncoding | UTF8Collate | CCtype | CAccess privileges |-[ RECORD 2 ]-----+----------------------Name | caveOwner | cavisteEncoding | UTF8

https://dalibo.com/formations51

Page 52: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Collate | CCtype | CAccess privileges |-[ RECORD 3 ]-----+----------------------Name | formationOwner | postgresEncoding | UTF8Collate | CCtype | CAccess privileges |[...]

-P VAR[=ARG] permet de préciser différentes options de sortie. Chaque couple variable-valeur est regroupé par un signe égal (VAR=ARG).

1.4.7 SÉPARATEURS DE CHAMPS

• Modifier le séparateur de colonnes– -F CHAINE | --field-separator CHAINE

• Forcer un octet 0x00 comme séparateur de colonnes– -z | --field-separator-zero

• Modifier le séparateur de lignes– -R CHAINE | --record-separator CHAINE

• Forcer un octet 0x00 comme séparateur de lignes– -0 | --record-separator-zero

-F CHAINE permet de modifier le séparateur de champ. Par défaut, il s’agit du caractère |.Cette option ne fonctionne qu’utilisée conjointement au modificateur de non-alignementdes champs.

Exemple :

postgres@serveur_pg:~$ psql -F';' -A

postgres=# \l

List of databasesName;Owner;Encoding;Collate;Ctype;Access privilegesb1;postgres;UTF8;C;C;cave;caviste;UTF8;C;C;formation;postgres;UTF8;C;C;postgres;postgres;UTF8;C;C;template0;postgres;UTF8;C;C;=c/postgrespostgres=CTc/postgres

52

Page 53: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

template1;postgres;UTF8;C;C;=c/postgrespostgres=CTc/postgres

-R CHAINE permet de modifier le séparateur d’enregistrements. il s’agit par défaut duretour chariot. Ce commutateur ne fonctionne qu’utilisé conjointement au mode non-aligné de sortie des enregistrements.

Exemple :

postgres@serveur_pg:~$ psql -R ' #Mon_séparateur# ' -A

postgres=# \l

List of databases #Mon_séparateur# Name|Owner|Encoding|Collate|Ctype| �Access privileges #Mon_séparateur# b1|postgres|UTF8|C|C| #Mon_séparateur# cave| �caviste|UTF8|C|C| #Mon_séparateur# formation|postgres|UTF8|C|C| #Mon_séparateur# �postgres|postgres|UTF8|C|C| #Mon_séparateur# template0|postgres|UTF8|C|C| �=c/postgres postgres=CTc/postgres #Mon_séparateur# template1|postgres|UTF8|C|C| �=c/postgres postgres=CTc/postgres #Mon_séparateur# (7 rows)

Les options -z et -0 modifient le caractère nul comme séparateur de colonne et de ligne.

1.4.8 PIVOTAGE DES RÉSULTATS

• \crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]• Exécute le contenu du tampon de requête

– la requête doit renvoyer au moins 3 colonnes• Affiche le résultat dans une grille croisée

– colV, en-tête vertical– colH, en-tête horizontal– colD, contenu à afficher dans le tableau– sortColH, colonne de tri pour l’en-tête horizontal

Disons que nous voulons récupérer le nombre de bouteilles en stock par type de vin (blanc,rosé, rouge) par année, pour les années entre 1950 et 1959 :

cave=# SELECT t.libelle, s.annee, sum(s.nombre) FROM stock sJOIN vin v ON v.id = s.vin_idJOIN type_vin t ON t.id = v.type_vin_idWHERE s.annee BETWEEN 1950 AND 1957GROUP BY t.libelle, s.anneeORDER BY s.annee;

libelle | annee | sum---------+-------+-------

https://dalibo.com/formations53

Page 54: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

blanc | 1950 | 69166rose | 1950 | 70311rouge | 1950 | 69836blanc | 1951 | 67325rose | 1951 | 67616rouge | 1951 | 66708blanc | 1952 | 67501rose | 1952 | 67481rouge | 1952 | 66116blanc | 1953 | 67890rose | 1953 | 67902rouge | 1953 | 67045blanc | 1954 | 67471rose | 1954 | 67759rouge | 1954 | 67299blanc | 1955 | 67306rose | 1955 | 68015rouge | 1955 | 66854blanc | 1956 | 67281rose | 1956 | 67458rouge | 1956 | 66990blanc | 1957 | 67323rose | 1957 | 67374rouge | 1957 | 66409

Et maintenant, nous souhaitons afficher ces informations avec en abscisse le libellé dutype de vin et en ordonnée les années :

cave=# \crosstabview

libelle | 1950 | 1951 | 1952 | 1953 | 1954 | 1955 | 1956 | 1957---------+-------+-------+-------+-------+-------+-------+-------+------blanc | 69166 | 67325 | 67501 | 67890 | 67471 | 67306 | 67281 | 67323rose | 70311 | 67616 | 67481 | 67902 | 67759 | 68015 | 67458 | 67374rouge | 69836 | 66708 | 66116 | 67045 | 67299 | 66854 | 66990 | 66409

Et si nous souhaitons l’inverse (les années en abscisse et les types de vin en ordonnée),c’est tout aussi simple :

cave=# \crosstabview annee libelle

annee | blanc | rose | rouge-------+-------+-------+-------1950 | 69166 | 70311 | 698361951 | 67325 | 67616 | 667081952 | 67501 | 67481 | 661161953 | 67890 | 67902 | 670451954 | 67471 | 67759 | 672991955 | 67306 | 68015 | 66854

54

Page 55: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1956 | 67281 | 67458 | 669901957 | 67323 | 67374 | 66409

1.4.9 FORMATAGE DANS LES SCRIPTS SQL

• La commande pset– \pset option [ valeur ]

• Activer le mode étendu– \pset expanded on

• 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

Il est possible de réaliser des modifications sur le format de sortie des résultats de requêtedirectement dans le script SQL ou en mode interactif dans psql.

option décrit l’option à initialiser. Pour obtenir la liste de ces options et leur valeur, il estpossible d’utiliser la commande \pset seule :

cave=# \psetborder 1columns 0csv_fieldsep ','expanded offfieldsep '|'fieldsep_zero offfooter onformat alignedlinestyle asciinull ''numericlocale offpager 1pager_min_lines 0recordsep '\n'recordsep_zero offtableattrtitletuples_only offunicode_border_linestyle singleunicode_column_linestyle singleunicode_header_linestyle single

https://dalibo.com/formations55

Page 56: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Pour certaines options, omettre valeur active ou désactive l’option. Voici une illustrationde ces possibilités sur l’utilisation de la pagination en mode interactif :

cave=# \pset pager offPager usage is off.cave=# \pset pagerPager is used for long output.cave=# \pset pagerPager usage is off.cave=# \pset pager onPager is used for long output.

L’utilisation de la complétion peut permettre d’obtenir la liste possible des valeurs pourune option :

cave=# \pset format

aligned csv latex troff-ms wrappedasciidoc html latex-longtable unaligned

Utiliser l’option help permet la même chose :

prod=> \pset format help

\pset: allowed formats are aligned, asciidoc, csv, html, latex, latex-longtable,troff-ms, unaligned, wrapped

prod=> \pset unicode_column_linestyle help

\pset: allowed Unicode column line styles are single, double

La liste complète de ces options de formatage et leur description est disponible dans ladocumentation de la commande psql8 .

1.4.10 CRONTAB

• Attention aux variables d’environnement• Configuration

– crontab -e

Lorsqu’un script est exécuté par cron, l’environnement de l’utilisateur n’est pas initialisé,ou plus simplement, les fichiers de personnalisation (par ex. .bashrc) de l’environnementne sont pas lus. Seule la valeur $HOME est initialisée. Il faut donc prévoir ce cas et initialiserles variables d’environnement requises de façon adéquate.

Par exemple, pour charger l’environnement de l’utilisateur :8https://docs.postgresql.fr/current/app-psql.html

56

Page 57: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

#!/bin/bash

. ${HOME}/.bashrc

...

Enfin, chaque utilisateur du système peut avoir ses propres crontab. L’utilisateur peut lesvisualiser avec la commande crontab -l et les éditer avec la commande crontab -e.

Chaque entrée dans la crontab doit respecter un format particulier.

Par exemple, pour lancer un script de maintenance à 03h10 chaque dimanche matin :

10 3 * * Sun /usr/local/pg/maintenance.sh >/dev/null &2>1

1.4.11 EXEMPLE

Sauvegarder une base et classer l’archive#!/bin/basht=`mktemp`pg_dump $1 | gzip > $td=`eval date +%d%m%y-%H%M%S`mv $t /backup/${1}_${d}.dump.gzexit 0

Par convention, le script doit renvoyer 0 s’il s’est déroulé correctement.

1.5 OUTILS GRAPHIQUES

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

Il existe de nombreux outils graphiques permettant d’administrer des bases de donnéesPostgreSQL. Certains sont libres, d’autres propriétaires. Certains sont payants, d’autresgratuits. Ils ont généralement les mêmes fonctionnalités de base, mais vont se distinguersur certaines fonctionnalités un peu plus avancées comme l’import et l’export de données.

Nous allons étudier ici plusieurs outils proposés par la communauté, temBoard, pgAdmin.

https://dalibo.com/formations57

Page 58: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.5.1 TEMBOARD

• Adresse: https://github.com/dalibo/temboard• Licence: PostgreSQL• Notes: Serveur sur Linux, client web

1.5.2 TEMBOARD - POSTGRESQL REMOTE CONTROL

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

temBoard est un outil permettant à un DBA de mener à bien la plupart de ses tâchescourantes.

Le serveur web est installé de façon centralisée et un agent est déployé pour chaqueinstance.

58

Page 59: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.5.3 TEMBOARD - MONITORING

La sectionMonitoring permet de visualiser les graphiques historisés au niveau du systèmed’exploitation (CPU, mémoire, ...) ainsi qu’au niveau de l’instance PostgreSQL.

https://dalibo.com/formations59

Page 60: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.5.4 TEMBOARD - ACTIVITY

La section Activity permet de lister toutes les requêtes courantes (Running), les requêtesbloquées (Waiting) ou bloquantes (Blocking). Il est possible à partir de cette vue d’annulerune requête.

60

Page 61: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.5.5 TEMBOARD - CONFIGURATION

La section Configuration permet de lister le paramètres des fichiers postgresql.conf,pg_hba.conf et pg_ident.conf.

Elle permet également de modifier ces paramètres. Suivant les cas, il sera proposé derecharger la configuration ou de redémarrer l’instance pour appliquer ces changements.

https://dalibo.com/formations61

Page 62: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.5.6 PGADMIN III

• Licence: PostgreSQL• Notes: Multiplateforme, multilangue• Éprouvé mais n’est plus maintenu

– Utilisable jusque PostgreSQL 10

pgAdmin III est un projet qui n’est plus maintenu malgré sa popularité. L’équipe dedéveloppement de pgAdmin n’est pas assez nombreuse pour maintenir pgAdmin III touten développant pgAdmin 4. Il n’est mentionné ici qu’à cause de l’étendue du parc installé.Il reste utilisable sur des versions un peu anciennes (jusque PostgreSQL 10).

pgAdmin III un client lourd. Il dispose d’un installeur9 pour Windows et macOSX, et depaquets pour les distributions Linux habituelles. Il est disponible sous licence PostgreSQL.

L’installeur Windows et celui pour macOS X sont des installeurs standards, très simples àutiliser.

À la première connexion, il proposera d’installer l’extension adminpack, qui fait partie descontrib de PostgreSQL.

9https://pgadmin-archive.postgresql.org/pgadmin3/index.html

62

Page 63: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.5.7 PGADMIN III : FONCTIONNALITÉS

• Connexion possible sur plusieurs serveurs & bases• Édition des fichiers de configuration locaux• Maintenance des bases de données (VACUUM, ANALYZE, etc.)• Visualisation des verrous• Visualisation des journaux applicatifs• Débogueur PL/pgSQL• Sauvegarde / restauration de base• Éditeur de requêtes

Il a l’avantage d’être un outil dédié à PostgreSQL avec toutes les spécificités et de perme-ttre une utilisation au quotidien

Les objets gérables par pgAdmin III sont :

• la base ;• les tables, les vues et les séquences ;• les rôles, les types et les fonctions ;• les tablespaces ;• les agrégats ;• les conversions ;• les domaines ;• les triggers et les procédures stockées ;• les opérateurs, les classes et les familles d’opérateur ;• les schémas.

https://dalibo.com/formations63

Page 64: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.5.8 PGADMIN III : ÉDITEUR DE REQUÊTE & PLANS

L’éditeur de requête permet de :

• lire/écrire un fichier de requêtes ;• exécuter une requête ;• sauvegarder le résultat d’une requête dans un fichier ;• consulter un plan de requête

64

Page 65: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.5.9 PGADMIN 4

• https://www.pgadmin.org• Application web• Licence : PostgreSQL• Multiplateforme, multilangue

pgAdmin 4 est une application web, même si une version émulant un client lourd existe.Après un début difficile, le produit est à présent mature. Il reprend l’essentiel des fonc-tionnalités de pgAdmin III. Il est bien entendu compatible avec les dernières versions dePostgreSQL.

Il peut être déployé sur Windows et macOS X et bien sûr Linux, où il faudra utiliser lesdépôts fournis par le projet10 , ou l’image docker.

Il est disponible sous licence PostgreSQL.

1.5.10 PGADMIN 4 : TABLEAU DE BORD

10https://www.pgadmin.org/download/

https://dalibo.com/formations65

Page 66: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Une des nouvelles fonctionnalités de pgAdmin 4 est l’apparition d’un tableau de bordremontant quelques métriques intéressantes et depuis la version 3.3 la visualisation desgéométries PostGIS.

66

Page 67: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.5.11 PHPPGADMIN

1.5.12 PHPPGADMIN : FONCTIONNALITÉS

• https://github.com/phppgadmin• Licence: GNU Public License• Application web, simple

– consultation, édition– sauvegarde, export

• Pérennité ?

PhpPgAdmin est une application web en PHP, légère et simple d’emploi, que l’on peutéventuellement ouvrir à un simple utilisateur pour modifier des données.

Le projet PhpPgAdmin n’était plus maintenu pendant des années mais son principaldéveloppeur a décidé de reprendre la maintenance du projet. La version 7.13 se ditcompatible jusqu’à la version 13 de PostgreSQL mais le partitionnement, par exemple,n’est pas géré. Notre conseil reste néanmoins de préférer la version web de pgAdmin 4qui est plus lourd mais plus puissant et plus pérenne.

https://dalibo.com/formations67

Page 68: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.5.13 ADMINER

1.5.14 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

Adminer est une application web à destination des utilisateurs, pouvant gérer plusieurstypes de bases, dont PostgreSQL.

Il consiste en un unique fichier PHP (éventuellement personnalisable par CSS).

Son interface peut sembler datée, voire primitive, mais elle est très simple et regroupeefficacement l’essentiel des fonctionnalités. C’est un candidat au remplacement de phpP-gAdmin.

68

Page 69: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.5.15 PGMODELER

1.5.16 PGMODELER

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

pgModeler permet de modéliser une base de données. Son intérêt par rapport à d’autresproduits concurrents est qu’il est spécialisé pour PostgreSQL. Il en supporte donc toutesles spécificités, comme l’héritage de tables, les types composites, les types tableaux…C’est une excellente solution pourmodéliser une base en partant de zéro, ou pour extraireune visualisation graphique d’une base existante.

Il est à noter que, bien que le projet soit open source, son installation par les sources peut

https://dalibo.com/formations69

Page 70: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

être laborieuse, et les paquets ne sont pas forcément disponibles. L’équipe de développe-ment propose des paquets binaires à prix modique.

1.6 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.

1.6.1 QUESTIONS

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

70

Page 71: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

1.7 TRAVAUX PRATIQUES

But :• Acquérir certains automatismes dans l’utilisation de psql• Créer des premières bases de données

L’ensemble des informations permettant de résoudre ces exercices a été abordé au coursde la partie théorique. Il est également possible de trouver les réponses dans le manuelde psql (man psql) ou dans l’aide en ligne de l’outil.

Il est important de bien discerner les différents utilisateurs impliqués au niveau systèmeet PostgreSQL.

Ouvrir plusieurs fenêtres ou consoles : au moins une avecl’utilisateur habituel (dalibo ici), une avec root, une avecl’utilisateur système postgres, une pour suivre le contenu destraces (postgresql*.log).

En tant qu’utilisateur systèmepostgres, et avec l’utilitaire en lignede commande createdb, créer une base de données nomméepgbench (elle appartiendra à postgres).

Avec psql, se connecter à la base pgbench en tant qu’utilisateurpostgres.

Lister les bases de l’instance.

Se déconnecter de PostgreSQL.

Toujours en tant qu’utilisateur système postgres, avec l’utilitairecreateuser, créer un rôle testperf (il doit avoir l’attribut LOGIN !).

Tenter de se connecter à la base pgbench en tant qu’utilisateurtestperf. Pourquoi cela échoue-t-il ?

https://dalibo.com/formations71

Page 72: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Adapter le fichier pg_hba.conf pour que n’importe quel utilisa-teur puisse se connecter en local sans mot de passe à la basepgbench. Recharger la configuration de PostgreSQL.

Avec un compte utilisateur, se connecter à la base pgbench entant que testperf. Se déconnecter.

Pour remplir quelques tables dans la base pgbench, on utilise unoutil de bench livré avec PostgreSQL :/usr/pgsql-11/bin/pgbench -i --foreign-keys -Utestperf pgbench

Se connecter à la base pgbench en tant que testperf.

Quelle est la taille de la base après alimentation ?

Afficher la liste des tables de la base pgbench et leur taille.

Quelle est la structure de la table pgbench_accounts ?

Afficher l’ensemble des autres objets non système (index,séquences, vues...) de la base.

Afficher la liste des rôles (utilisateurs).

Afficher l’ensemble des tables systèmes (schéma pg_catalog).

Afficher l’ensemble des vues systèmes (schéma pg_catalog).

72

Page 73: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

Sans se déconnecter, prendre l’identité de l’utilisateur testperfdans la base pgbench.

Le but est de créer une copie de la table pgbench_tellers avecCREATE TABLE AS. Afficher son aide.

Créer une table pgbench_tellers_svg, copie de la tablepgbench_tellers.

Sortir le contenu de la table pgbench_tellers dans un fichier/tmp/pgbench_tellers.csv (commande \copy).

Quel est le répertoire courant ? Sans quitter psql, se déplacervers /tmp/, et en lister le contenu.

Afficher le contenu du fichier /tmp/pgbench_tellers.csvdepuis psql.

Créer un fichier décompte.sql, contenant 3 requêtes pourcompter le nombre de lignes dans les 3 plus grosses tables.Il devra écrire dans le fichier /tmp/décompte.txt.Le faire exécuter par psql.

https://dalibo.com/formations73

Page 74: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

1.8 TRAVAUX PRATIQUES (SOLUTIONS)

Ouvrir plusieurs fenêtres ou consoles : au moins une avecl’utilisateur habituel (dalibo ici), une avec root, une avecl’utilisateur système postgres, une pour suivre le contenu destraces (postgresql*.log).

Pour devenir root :

$ sudo su -

Pour devenir postgres :

$ sudo -iu postgres

Pour voir le contenu des traces défiler, se connecter dans une nouvelle fenêtre à nouveauen tant que postgres, et aller chercher le fichier de traces. Sur Red Hat/CentOS, il est pardéfaut dans $PGDATA/log et son nom exact varie chaque jour :

$ sudo -iu postgres$ ls -l /var/lib/pgsql/11/data/log-rw------- 1 postgres postgres 371 16 juil. 10:53 postgresql-Tue.log$ tail -f /var/lib/pgsql/11/data/log/postgresql-Tue.log

Par défaut ne s’afficheront que peu de messages : arrêt/redémarrage, erreur de connex-ion... Laisser la fenêtre ouverte en arrière-plan ; elle servira à analyser les problèmes.

En tant qu’utilisateur systèmepostgres, et avec l’utilitaire en lignede commande createdb, créer une base de données nomméepgbench (elle appartiendra à postgres).

Si vous n’êtes pas déjà postgres :

$ sudo -iu postgres

$ createdb --echo pgbenchSELECT pg_catalog.set_config('search_path', '', false)CREATE DATABASE pgbench;

Avec psql, se connecter à la base pgbench en tant qu’utilisateurpostgres.

$ psql -d pgbench -U postgrespsql (11.4)Saisissez « help » pour l'aide.

74

Page 75: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

pgbench=#

Lister les bases de l’instance.

pgbench=# \l

Liste des bases de donnéesNom | Propriétaire|Encodage|Collationnement|Type caract.| Droits d'accès

---------+-------------+--------+---------------+------------+---------------------pgbench | postgres |UTF8 |en_GB.UTF-8 |en_GB.UTF-8 |postgres | postgres |UTF8 |en_GB.UTF-8 |en_GB.UTF-8 |template0| postgres |UTF8 |en_GB.UTF-8 |en_GB.UTF-8 |=c/postgres +

| | | | |postgres=CTc/postgrestemplate1| postgres |UTF8 |en_GB.UTF-8 |en_GB.UTF-8 |=c/postgres +

| | | | |postgres=CTc/postgres

Noter qu’en ligne de commande, le même résultat est renvoyé par :

$ psql -l

Se déconnecter de PostgreSQL.

pgbench=# \q-bash-4.2$

(exit et Ctrl-d fonctionnent également.)

Toujours en tant qu’utilisateur système postgres, avec l’utilitairecreateuser, créer un rôle testperf (il doit avoir l’attribut LOGIN !).

$ createuser --echo --login testperfSELECT pg_catalog.set_config('search_path', '', false)CREATE ROLE testperf NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

Tenter de se connecter à la base pgbench en tant qu’utilisateurtestperf. Pourquoi cela échoue-t-il ?

$ psql -d pgbench -U testperf

psql: FATAL: Peer authentication failed for user "testperf"

Dans les traces doivent apparaître ces lignes :

https://dalibo.com/formations75

Page 76: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

LOG: provided user name (testperf) and authenticated user name (postgres)do not match

FATAL: Peer authentication failed for user "testperf"DETAIL: Connection matched pg_hba.conf line 80: "local all all peer"

En effet, nous sommes connectés en tant qu’utilisateur système postgres (ou dalibo ouroot...), et la méthode d’authentification peer n’autorise une connexion qu’à un utilisateurPostgreSQL de même nom.

L’utilisateur système postgres n’a donc pas de droit particulier de connexion aux bases ; ila juste le droit de se connecter en tant que postgres, qui se trouve être le superutilisateurde l’instance (on pourrait le remplacer par un autre), et le droit de modifier les fichiers deconfiguration.

Adapter le fichier pg_hba.conf pour que n’importe quel utilisa-teur puisse se connecter en local sans mot de passe à la basepgbench. Recharger la configuration de PostgreSQL.

Ajouter une ligne avant les autres dans pg_hba.conf :

# TYPE DATABASE USER ADDRESS METHODlocal pgbench all trust

Ceci est une faille de sécurité ! Nous ferons mieux plus tard.

Ne pas oublier de recharger la configuration de PostgreSQL. Sous root :

# systemctl reload postgresql-11

Alternativement, depuis la ligne de commande, en tant que postgres, depuis psql :

$ psql -c "SELECT pg_reload_conf() ;"pg_reload_conf----------------t

Dans les traces, ne doit apparaître que :

LOG: received SIGHUP, reloading configuration files

Avec un compte utilisateur, se connecter à la base pgbench entant que testperf. Se déconnecter.

$ psql -d pgbench -U testperfpsql (11.4)

76

Page 77: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

Saisissez « help » pour l'aide.

pgbench=> \q

Pour remplir quelques tables dans la base pgbench, on utilise unoutil de bench livré avec PostgreSQL :/usr/pgsql-11/bin/pgbench -i --foreign-keys -Utestperf pgbench

L’outil est livré est PostgreSQL mais n’est pas dans les chemins par défaut sur Red Hat ouCentOS.

La connexion doit fonctionner depuis n’importe quel compte, il s’agit d’une connexioncliente tout comme psql.

Se connecter à la base pgbench en tant que testperf.

$ psql -U testperf pgbenchpsql (11.4)Saisissez « help » pour l'aide.

pgbench=>

Quelle est la taille de la base après alimentation ?

\l+ renvoie notamment ceci :

pgbench=> \l+Liste des bases de données

Nom |Propriétaire|...|Taille |Tablespace| Description---------+------------+---+-------+----------+----------------------------------pgbench |postgres |...|23 MB |pg_default|postgres |postgres |...|7949 kB|pg_default|default administrative ...template0|postgres |...|7809 kB|pg_default|unmodifiable empty databasetemplate1|postgres |...|7809 kB|pg_default|default template for new databases

La base pgbench fait donc 23 Mo.

Afficher la liste des tables de la base pgbench et leur taille.

https://dalibo.com/formations77

Page 78: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

pgbench=> \d+Liste des relations

Schéma | Nom | Type | Propriétaire | Taille | Description--------+------------------+-------+--------------+---------+-------------public | pgbench_accounts | table | testperf | 13 MB |public | pgbench_branches | table | testperf | 40 kB |public | pgbench_history | table | testperf | 0 bytes |public | pgbench_tellers | table | testperf | 40 kB |

Quelle est la structure de la table pgbench_accounts ?

\d (voire d+) est sans doute un des ordres les plus utiles à connaître :

pgbench=> \d pgbench_accountsTable « public.pgbench_accounts »

Colonne | Type | Collationnement | NULL-able | Par défaut----------+---------------+-----------------+-----------+------------aid | integer | | not null |bid | integer | | |abalance | integer | | |filler | character(84) | | |Index :

"pgbench_accounts_pkey" PRIMARY KEY, btree (aid)Contraintes de clés étrangères :

"pgbench_accounts_bid_fkey" FOREIGN KEY (bid) REFERENCES pgbench_branches(bid)Référencé par :

TABLE "pgbench_history" CONSTRAINT "pgbench_history_aid_fkey"FOREIGN KEY (aid) REFERENCES pgbench_accounts(aid)

La table a trois colonnes aid, bid, abalance, filler.

La première porte la clé primaire (et ne peut donc être à NULL).

La seconde est une clé étrangère pointant vers pgbench_branches.

La table pgbench_history porte une clé étrangère pointant vers la clé primaire de cettetable.

Afficher l’ensemble des autres objets non système (index,séquences, vues...) de la base.

Les index :

78

Page 79: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

pgbench=> \di+Liste des relations

Schéma | Nom |Type | Propriétaire| Table | Taille |...-------+-----------------------+-----+-------------+----------------+---------+---public | pgbench_accounts_pkey |index| testperf |pgbench_accounts| 2208 kB |public | pgbench_branches_pkey |index| testperf |pgbench_branches| 16 kB |public | pgbench_tellers_pkey |index| testperf |pgbench_tellers | 16 kB |

Ces index sont ceux portés par les clés primaires.

Il n’y a ni séquence ni vue :

pgbench=> \dsN'a trouvé aucune relation.pgbench=> \dvN'a trouvé aucune relation.

Afficher la liste des rôles (utilisateurs).

Il n’y a que le superutilisateur postgres (par défaut), et testperf créé tout-à-l’heure :

pgbench=> \duListe des rôles

Nom du rôle | Attributs | Membre de-------------+-----------------------------------------------------+-----------postgres | Superutilisateur, Créer un rôle, Créer une base, |

| Réplication, Contournement RLS | {}testperf | | {}

Afficher l’ensemble des tables systèmes (schéma pg_catalog).

pgbench=> \dt pg_catalog.*Liste des relations

Schéma | Nom | Type | Propriétaire------------+-------------------------+-------+--------------pg_catalog | pg_aggregate | table | postgrespg_catalog | pg_am | table | postgres...pg_catalog | pg_statistic | table | postgres...(62 lignes)

https://dalibo.com/formations79

Page 80: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Notons que pour afficher uniquement les tables système, on préférera le raccourci \dtS.

Afficher l’ensemble des vues systèmes (schéma pg_catalog).

Certaines des vues ci-dessous sont très utiles dans la vie de DBA :

pgbench=> \dv pg_catalog.*Liste des relations

Schéma | Nom | Type | Propriétaire------------+---------------------------------+------+--------------pg_catalog | pg_available_extension_versions | vue | postgrespg_catalog | pg_available_extensions | vue | postgrespg_catalog | pg_config | vue | postgrespg_catalog | pg_cursors | vue | postgrespg_catalog | pg_file_settings | vue | postgrespg_catalog | pg_group | vue | postgrespg_catalog | pg_hba_file_rules | vue | postgrespg_catalog | pg_indexes | vue | postgrespg_catalog | pg_locks | vue | postgres...pg_catalog | pg_roles | vue | postgres...pg_catalog | pg_sequences | vue | postgrespg_catalog | pg_settings | vue | postgres...pg_catalog | pg_stat_activity | vue | postgres...pg_catalog | pg_stat_database | vue | postgres...pg_catalog | pg_stat_user_indexes | vue | postgrespg_catalog | pg_stat_user_tables | vue | postgres...pg_catalog | pg_stats | vue | postgres...pg_catalog | pg_views | vue | postgres(59 lignes)

Là encore, \dvS est un équivalent pour les tables systèmes.

80

Page 81: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

Sans se déconnecter, prendre l’identité de l’utilisateur testperfdans la base pgbench.

pgbench=> \c pgbench testperfVous êtes maintenant connecté à la base de données « pgbench »en tant qu'utilisateur « testperf ».

Le but est de créer une copie de la table pgbench_tellers avecCREATE TABLE AS. Afficher son aide.

pgbench=> \h CREATE TABLE AS

Commande : CREATE TABLE ASDescription : définir une nouvelle table à partir des résultats d’une requêteSyntaxe :CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] nom_table

[ (nom_colonne [, ...] ) ][ WITH ( paramètre_stockage [= valeur] [, ... ] ) | WITH OIDS | WITHOUT OIDS ][ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ][ TABLESPACE nom_tablespace ]AS requête[ WITH [ NO ] DATA ]

Créer une table pgbench_tellers_svg, copie de la tablepgbench_tellers.

pgbench=> CREATE TABLE pgbench_tellers_svg AS SELECT * FROM pgbench_tellers ;SELECT 10

Sortir le contenu de la table pgbench_tellers dans un fichier/tmp/pgbench_tellers.csv (commande \copy).

pgbench=> \copy pgbench_tellers to '/tmp/pgbench_tellers.csv'COPY 10

Rappelons que la commande \copy est propre à psql (outil client) et ne doit pas être con-fondue avec COPY, commande exécutée par le serveur et n’ ‘ayant accès qu’au système defichiers du serveur. Il est important de bien connaître la distinction même si l’on travailleici directement sur le serveur.

Quel est le répertoire courant ? Sans quitter psql, se déplacervers /tmp/, et en lister le contenu.

https://dalibo.com/formations81

Page 82: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

Outils graphiques et console

Le répertoire courant est celui en cours quand psql a été lancé. Selon les cas, ce peutêtre /home/dalibo, /var/lib/pgsql/... On peut se déplacer avec \cd.

pgbench=> \! pwd/home/dalibo

pgbench=> \cd /tmp

pgbench=> \! lspgbench_tellers.csvsystemd-private-1b08135528d846088bb892f5a82aec9e-bolt.service-1hjHUH...pgbench=>

Afficher le contenu du fichier /tmp/pgbench_tellers.csvdepuis psql.

Son contenu est le suivant :

pgbench=> \! cat /tmp/pgbench_tellers.csv1 1 0 \N2 1 0 \N3 1 0 \N4 1 0 \N5 1 0 \N6 1 0 \N7 1 0 \N8 1 0 \N9 1 0 \N10 1 0 \N

On aurait pu l’ouvrir avec un éditeur de texte ou n’importe quel autre programme présentsur le client :

pgbench=> \! vi /tmp/pgbench_tellers.csv

Créer un fichier décompte.sql, contenant 3 requêtes pourcompter le nombre de lignes dans les 3 plus grosses tables.Il devra écrire dans le fichier /tmp/décompte.txt.Le faire exécuter par psql.

Le fichier doit contenir ceci :

82

Page 83: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

1. OUTILS GRAPHIQUES ET CONSOLE

\o /tmp/décompte.txtSELECT COUNT(*) FROM pgbench_accounts ;SELECT COUNT(*) FROM pgbench_tellers ;SELECT COUNT(*) FROM pgbench_branches ;

Il peut être appelé par :

$ psql -U testperf -d pgbench -f /tmp/décomptes.sql

Vérifier ensuite le contenu de /tmp/décompte.txt.

https://dalibo.com/formations83

Page 84: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

NOTES

Page 85: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

NOTES

Page 86: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

NOS AUTRES PUBLICATIONS

FORMATIONS

• DBA1 : Administra on PostgreSQLhttps://dali.bo/dba1

• DBA2 : Administra on PostgreSQL avancéhttps://dali.bo/dba2

• DBA3 : Sauvegardes et réplica on avec PostgreSQLhttps://dali.bo/dba3

• DEVPG : Développer avec PostgreSQLhttps://dali.bo/devpg

• DEVSQLPG : SQL pour PostgreSQLhttps://dali.bo/devsqlpg

• PERF1 : PostgreSQL Performanceshttps://dali.bo/perf1

• PERF2 : Indexa on et SQL avancéhttps://dali.bo/perf2

• MIGORPG : Migrer d’Oracle vers PostgreSQLhttps://dali.bo/migorpg

LIVRES BLANCS

• Migrer d’Oracle à PostgreSQL

• Industrialiser PostgreSQL

• Bonnes pra ques de modélisa on avec PostgreSQL

• Bonnes pra ques de développement avec PostgreSQL

TÉLÉCHARGEMENT GRATUIT

Les versions électroniques de nos publica ons sont disponibles gratuitement sous licenceopen-source ou sous licence Crea ve Commons. Contactez-nous à l’adresse [email protected] pour plus d’informa on.

Page 87: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l
Page 88: Outils graphiques et consoleCherslectrices&lecteurs, NosformationsPostgreSQLsontissuesdeplusde12ansd’études, d’expériencede terrainetdepassionpourleslogicielslibres. PourDalibo,l

DALIBO, L’EXPERTISE POSTGRESQL

Depuis 2005, DALIBOmet à la disposi on de ses clients son savoir-faire dans le domainedes bases de données et propose des services de conseil, de forma on et de support auxentreprises et aux ins tu onnels.

En parallèle de son ac vité commerciale, DALIBO contribue aux développements de lacommunauté PostgreSQL et par cipe ac vement à l’anima on de la communauté fran-cophone de PostgreSQL. La société est également à l’origine de nombreux ou ls libres desupervision, de migra on, de sauvegarde et d’op misa on.

Le succès de PostgreSQL démontre que la transparence, l’ouverture et l’auto-ges on sontà la fois une source d’innova on et un gage de pérennité. DALIBO a intégré ces principesdans son ADN en optant pour le statut de SCOP : la société est contrôlée à 100 % parses salariés, les décisions sont prises collec vement et les bénéfices sont partagés à partségales.