Vous appréciez mon travail ?
Je serais ravi de prendre un café !

Vous prenez du plaisir à lire mes articles ? Vous apprenez de nouvelles choses ? Je serais ravis que vous supportiez mon travail avec une petite participation

1 café Merci, vous financez ma dose quotidienne de théïne (oui, en vrai je ne bois pas de café).
5 cafés Génial, ça couvre mes frais de serveur mensuels.
10 cafés Fantastique, avec ça je peux investir dans du matériel et approfondir mes connaissances.
BazinGa's - Tips & tuto IT

Tests sous PostgreSQL

Je fais régulièrement des tests sous PostgreSQL. A chaque fois il me faut exécuter une série de fichiers SQL mais surtout avoir un retour sur ce qui se passe et ce de façon clair et lisible.

Pour exécuter une série de fichier SQL, n’hésitez pas à consulter cet article :

Pour les retours, nous allons donc générer des logs personnalisés car les retours faits par PostgreSQL sont intéressant… mais pas toujours…

En effet, il peut être intéressant de choisir ce qui est retourné et donc renseigné dans les logs. Voici quelques astuces.

Paramétrage de PSQL

Pour limiter les retours, utilisez l’option --quiet de psql qui le force à limiter les retours.

Afficher un message personnalisé

Pour afficher un message personnalisé, utilisez la méta-commande \echo suivie de votre message. Utilisez \n pour ajouter un saut de ligne.

\echo 'Tests SQL\n======================\n'

Retournera alors :

Tests SQL
======================

Pour insérer une simple ligne vide, utilisez \echo ''.

Restreindre les données affichées

Lorsqu’une requête SELECT est exécutée, il est possible de restreindre les éléments affichés.

\pset tuples_only on (par défaut à off) permet de n’afficher que les données retournées et non toutes les décorations qui vont avec (le tableau de données)

Voici un exemple :

\echo 'Avec les décorations'

SELECT 
     1  as "colonne a",
  'abc' as "colonne b"
;


\echo 'Sans les décorations'
\pset tuples_only on

SELECT 
     1  as "colonne a",
  'abc' as "colonne b"
;

Retournera alors :

Avec les décorations
 colonne a | colonne b 
-----------+-----------
         1 | abc
(1 ligne)

Sans les décorations
         1 | abc

Il est parfois utile d’exécuter une requête mais sans vouloir afficher le résultat, par exemple pour exécuter une fonction. Il faut alors utiliser un bloc de code anonyme avec le mot clé PERFORM tel que suivant :

DO $$ BEGIN
  PERFORM 'aa' as "colonne 1";
END $$;

DO $$ BEGIN
  PERFORM gen_random_uuid();
END $$;

Vous aurez alors ce retour :

Exécuter une requête sans retour

Gérer les messages des codes PL/pgSQL

Le code PL/pgSQL exécuté par les fonctions ou les procédures peut renvoyer des messages de différents niveaux. Il est possible de contrôler leur affichage.

Voici les différents niveaux disponibles :

  • DEBUG,
  • LOG,
  • INFO,
  • NOTICE,
  • WARNING,
  • EXCEPTION

Pour spécifier le niveau pouvant être afficher il suffit d’utiliser la requête suivante :

SET client_min_messages TO NOTICE;

Voici un exemple au sein d’un bloc de code anonyme :

\echo '❗Spécifier le niveau des messages à afficher'

\echo '❓Tous les message supérieur ou égal à NOTICE s''affichent'
SET client_min_messages TO NOTICE;
DO $$ BEGIN
  RAISE NOTICE 'Voici un message de notification';
  RAISE WARNING 'Voici un message d''avertissement';
END $$;

\echo '❓Tous les message supérieur ou égal à WARNING s''affichent'
SET client_min_messages TO WARNING;
DO $$ BEGIN
  RAISE NOTICE 'Voici un message de notification';
  RAISE WARNING 'Voici un message d''avertissement';
END $$;

Qui retourne :

❗Spécifier le niveau des messages à afficher
❓Tous les message supérieur ou égal à NOTICE s'affichent
 NOTICE:  Voici un message de notification
 WARNING:  Voici un message d'avertissement
❓Tous les message supérieur ou égal à WARNING s'affichent
 WARNING:  Voici un message d'avertissement

Un exemple complet

Voici un exemple complet :

\echo 'Tests SQL\n======================\n'

\echo 'Les retours attendus sont indiqué par "❓" en début de ligne'
\echo 'Les commentaires commencent par "❗" en début de ligne'
\echo '\n'


\echo '❗Avec les décorations'
\echo '❓Le tableau complet doit apparaitre'

SELECT 
     1  as "colonne a",
  'abc' as "colonne b"
;
\echo ''



\echo '❗Sans les décorations'
\echo '❓Seule les données doivent apparaitre'
\pset tuples_only on

SELECT 
     1  as "colonne a",
  'abc' as "colonne b"
;
\echo '\n'



\echo '❗Exécuter une requête sans retour'
\echo '❓Rien ne doit apparaitre sous cette ligne'
DO $$ BEGIN
  PERFORM 'aa' as "colonne 1";
END $$;

DO $$ BEGIN
  PERFORM gen_random_uuid();
END $$;
\echo '\n'


\echo '❗Spécifier le niveau des messages à afficher'

\echo '❓Tous les message supérieur ou égal à NOTICE s''affichent'
SET client_min_messages TO NOTICE;
DO $$ BEGIN
  RAISE NOTICE 'Voici un message de notification';
  RAISE WARNING 'Voici un message d''avertissement';
END $$;
\echo ''

\echo '❓Tous les message supérieur ou égal à WARNING s''affichent'
SET client_min_messages TO WARNING;
DO $$ BEGIN
  RAISE NOTICE 'Voici un message de notification';
  RAISE WARNING 'Voici un message d''avertissement';
END $$;
Tests SQL
======================

Les retours attendus sont indiqué par "❓" en début de ligne
Les commentaires commencent par "❗" en début de ligne


❗Avec les décorations
❓Le tableau complet doit apparaitre
 colonne a | colonne b 
-----------+-----------
         1 | abc
(1 ligne)


❗Sans les décorations
❓Seule les données doivent apparaitre
         1 | abc



❗Exécuter une requête sans retour
❓Rien ne doit apparaitre sous cette ligne


❗Spécifier le niveau des messages à afficher
❓Tous les message supérieur ou égal à NOTICE s'affichent
psql:test.sql:50: NOTICE:  Voici un message de notification
psql:test.sql:50: WARNING:  Voici un message d'avertissement

❓Tous les message supérieur ou égal à WARNING s'affichent
psql:test.sql:58: WARNING:  Voici un message d'avertissement

Cet article vous a plu ?

N'hésitez pas à le partager, il interessera surement certains de vos contacts.

Les thèmes suivants contiennent des articles en lien avec celui-ci, allez faire un tour :

PostgreSQLSQL log

50%