DEV Community

Bastien Dronneau
Bastien Dronneau

Posted on

Psqlrc

Je me connecte régulièrement à des serveurs postgresql, soit pour du développement soit pour debug. En effet, l'observabilité manque parfois de détails.

Afin de me simplifier la vie j'utilise le fichier de configuration .psqlrc (source). Il permet comme tous les fichiers de configuration dotfiles, celui-ci permet de configurer le client, par exemple le prompt.

\set PROMPT1 '%[%033[1m%]%M %n@%/%R%[%033[0m%]%# '
\set PROMPT2 '[more] %R > '
Enter fullscreen mode Exit fullscreen mode

La signification des variables est disponible ici).

ou pour activer par défaut le timing

\timing
Enter fullscreen mode Exit fullscreen mode

La directive \set QUIET 1 au début du fichier réduit les retours des commandes car ces dernières sont exécutées après la connexion.

Après la configuration esthétique, on peut ajouter des alias pour appeler facilement des requêtes de débogage (verrous, activité,...)
Remarque: Certaines de ces commandes nécessitent des privilèges SUPERUSER pour afficher les résultats.

\set activity 'select datname, pid, usename, application_name,client_addr, client_hostname, client_port, query, state from pg_stat_activity;'
\set locks 'select pg_stat_activity.pid, pg_class.relname, pg_locks.transactionid, pg_locks.granted, substr(pg_stat_activity.query,1,30) as query_snippet, age(now(),pg_stat_activity.query_start) as "age" from pg_stat_activity,pg_locks left outer join pg_class on (pg_locks.relation = pg_class.oid) where pg_stat_activity.query <> ''<insufficient privilege>'' and pg_locks.pid=pg_stat_activity.pid and pg_locks.mode = ''ExclusiveLock'' order by query_start;'
Enter fullscreen mode Exit fullscreen mode

Puis on appelle l'alias avec :activity

127.0.0.1 postgres@postgres=# :activity
┌──────────┬─────┬──────────┬──────────────────┬─────────────┬─────────────────┬─────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬────────┐
│ datname  │ pid │ usename  │ application_name │ client_addr │ client_hostname │ client_port │                                                             query                                                             │ state  │
├──────────┼─────┼──────────┼──────────────────┼─────────────┼─────────────────┼─────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────┤
│ (null)   │  28 │ postgres │                  │ (null)      │ (null)          │      (null) │                                                                                                                               │ (null) │
│ (null)   │  27 │ (null)   │                  │ (null)      │ (null)          │      (null) │                                                                                                                               │ (null) │
│ (null)   │  24 │ (null)   │                  │ (null)      │ (null)          │      (null) │                                                                                                                               │ (null) │
│ (null)   │  23 │ (null)   │                  │ (null)      │ (null)          │      (null) │                                                                                                                               │ (null) │
│ (null)   │  26 │ (null)   │                  │ (null)      │ (null)          │      (null) │                                                                                                                               │ (null) │
└──────────┴─────┴──────────┴──────────────────┴─────────────┴─────────────────┴─────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────┘
(7 rows)

Time: 3.299 ms
Enter fullscreen mode Exit fullscreen mode

Faites toujours attention aux requêtes que vous lancer manuellement sur les instances de PROD.

Plus de lecture / sources:

Top comments (0)