Styles

vendredi 7 mars 2014

PostgreSQL : configuration de l'environnement psql

Quand il s'agit de configurer et manipuler une base de données, rien de mieux que d'utiliser le client sql en mode texte qui permet de manipuler directement les objets de la base dans tous les sens. Concernant PostgreSQL, le client psql est aussi complet qu'un client SQL*Plus pour Oracle Database par exemple.

Il s'agit de configurer correctement psql pour être plus productif. Pour cela, on stockera dans ~/.psqlrc la configuration de base qui sera chargée à chaque lancement de psql.

Voici mon fichier de configuration ~/.psqlrc que j'utilise tous les jours:

\set QUIET ON

\set PROMPT1 '%n@%M %~%R%# '
\set PAGER OFF
\set HISTFILE ~/.psql_history- :HOST - :DBNAME
\set HISTSIZE 2000
\set ECHO_HIDDEN ON
\set COMP_KEYWORD_CASE upper
\timing on
\encoding unicode
\pset null 'NULL'
\pset border 1

\set QUIET OFF

\echo 'Predefined queries:\n'
\echo '\t\t\t:settings\t-- Server Settings'
\echo '\t\t\t:dbsize\t\t-- Database Size'
\echo '\t\t\t:tablesize\t-- Tables Size'
\echo '\t\t\t:uptime\t\t-- Server uptime'

\set settings 'select name, setting,unit,context from pg_settings;'

\set dbsize 'SELECT datname, pg_size_pretty(pg_database_size(datname)) db_size FROM pg_database ORDER BY db_size;'

\set tablesize 'SELECT nspname || \'.\' || relname AS \"relation\", pg_size_pretty(pg_relation_size(C.oid)) AS "size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN (\'pg_catalog\', \'information_schema\') ORDER BY pg_relation_size(C.oid) DESC LIMIT 40;'

\set uptime 'select now() - pg_postmaster_start_time() AS uptime;'


Faites \? sous psql pour voir quel est le sens de chaque instruction. A noter le moyen bien pratique pour enregistrer des requêtes prédéfinies dans des variables.

Sous windows, ce fichier n'est pas dans %HOME%\.psqlrc mais à %APPDATA%\postgresql\psqlrc.conf On peut aussi indiquer explicitement où se trouve le fichier .psqlrc en mettant son chemin complet dans la variable d'environnement PSQLRC.

Une autre configuration intéressante est l'instruction \x qui permet d'indiquer vouloir afficher les lignes de données en colonne plutôt qu'en ligne : pratique quand on est en présence de lignes assez longues.