Format de sortie alternatif pour psql

316

J'utilise PostgreSQL 8.4 sur Ubuntu. J'ai une table avec des colonnes à c1travers cN. Les colonnes sont suffisamment larges pour que la sélection de toutes les colonnes entraîne une ligne des résultats de la requête plusieurs fois. Par conséquent, la sortie est difficile à lire.

Lorsque les résultats de la requête ne constituent que quelques lignes, il serait pratique que je puisse afficher les résultats de la requête de telle sorte que chaque colonne de chaque ligne se trouve sur une ligne distincte, par exemple

 c1: <value of row 1's c1>
 c2: <value of row 1's c1>
 ...
 cN: <value of row 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2's c1>
 etc.

J'exécute ces requêtes sur un serveur où je préférerais ne pas installer de logiciel supplémentaire. Y a-t-il un paramètre psql qui me permettra de faire quelque chose comme ça?

user100464
la source

Réponses:

532

J'avais juste besoin de passer plus de temps à regarder la documentation. Cette commande:

\x on

fera exactement ce que je voulais. Voici quelques exemples de sortie:

select * from dda where u_id=24 and dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               | 
dda_nickname       | 
dda_account_name   | 
cu_id              | 1
abd_id             | 
user100464
la source
8
Vous pouvez également essayer le format \ pset encapsulé (les formats autorisés sont non alignés, alignés, encapsulés, html, latex, troff-ms). Si l'affichage est suffisamment étroit, il encapsulera chaque colonne.
Bryce
12
\xseul changera la valeur, vous épargnant trois frappes! (Utile lorsque vous basculez rapidement entre les sorties larges et étroites).
msanford
7
Si vous recherchez l'équivalent \Gde Mysql, essayez d'ajouter \x\g\xà la fin de la requête ou de définir un raccourci dans l' ~/.psqlrcajout \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', puis utilisez-le à la fin :G. (notez le manque de points-virgules)
Sławomir Lenart
5
Est-il possible de passer " \x on" ou l'équivalent en ligne de commande? Ce serait bien si je pouvais simplement enregistrer (par exemple, en utilisant un alias de shell bash) psql --somethingafin que l'option soit toujours activée par défaut.
Machineghost
2
@machineghost Utilisez -P expanded=autoou--pset expanded=auto
alecdwm
269

(Nouveau) Mode automatique étendu: \ x auto

Nouveau pour Postgresql 9.2; PSQL ajuste automatiquement les enregistrements à la largeur de l'écran. auparavant, vous n'aviez que le mode étendu activé ou désactivé et deviez basculer entre les modes si nécessaire.

  • Si l'enregistrement peut tenir dans la largeur de l'écran; psql utilise un formatage normal.
  • Si l'enregistrement ne peut pas tenir dans la largeur de l'écran; psql utilise le mode étendu.

Pour obtenir cette utilisation: \ x auto

Postgresql 9.5 Documentation sur la commande PSQL.


Grand écran, formatage normal:

 id | time  |       humanize_time             | value 
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 rows)

Écran étroit, formatage étendu:

-[ RECORD 1 ]-+---------------------------
id            | 1
time          | 09:30
humanize_time | Early Morning - (9.30 am)
value         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
time          | 11:30
humanize_time | Late Morning - (11.30 am)
value         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
time          | 13:30
humanize_time | Early Afternoon - (1.30pm)
value         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
time          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
value         | 930

Comment démarrer psql avec \ x auto?

Configurez la \x autocommande au démarrage en l'ajoutant à .psqlrcdans votre dossier personnel et en redémarrant psql. Regardez sous la section «Fichiers» dans la doc psql pour plus d'informations .

~ / .psqlrc

\x auto
notapatch
la source
70

Vous avez tellement de choix, comment pourriez-vous être confus :-)? Les principaux contrôles sont les suivants:

# \pset format
# \H
# \x
# \pset pager off

Chacun a des options et des interactions avec les autres. Les options les plus automatiques sont:

# \x off;\pset format wrapped
# \x auto

La nouvelle option "\ x auto" passe à l'affichage ligne par ligne uniquement "si nécessaire".

-[ RECORD 1 ]---------------
id          | 6
description | This is a gallery of oilve oil brands.
authority   | I love olive oil, and wanted to create a place for
reviews and comments on various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A 
authority   | Testing

L'ancien "format \ pset encapsulé" est similaire en ce qu'il essaie d'ajuster parfaitement les données à l'écran, mais revient à non aligné si les en-têtes ne tiennent pas. Voici un exemple d'enveloppé:

 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This is a gallery of oilve     | I love olive oil, and wanted to
    ; oil brands.                    ;  create a place for reviews and
    ;                                ;  comments on various types.
 19 | Test Test A                    | Testing
Bryce
la source
\x autoavec \pset pager offest sympa.
mitnk
Sont \x off; \pset format wrappedet sont \x autodestinés à être utilisés ensemble ou s'excluent-ils mutuellement?
Demitri
20

Une chose intéressante est que nous pouvons visualiser les tables horizontalement, sans plier. nous pouvons utiliser PAGERla variable d'environnement. psql en fait usage. vous pouvez définir

export PAGER='/usr/bin/less -S'

ou juste less -Ssi son déjà disponible en ligne de commande, sinon avec l'emplacement approprié. -S pour afficher les lignes dépliées. vous pouvez passer dans n'importe quelle visionneuse personnalisée ou d'autres options avec elle.

J'en ai écrit plus dans Psql Horizontal Display

Dineshkumar
la source
1
La réponse est vraiment bonne. Je suis surpris que ce ne soit pas marqué plus haut. Parfait pour toute personne travaillant dans un terminal.
LUser
Cela a été extrêmement utile
Merlin
C'est utile, mais comment faites-vous défiler vers la droite?
Niel de Wet
18

pspg est un outil simple qui offre un formatage de tableau avancé, un défilement horizontal, une recherche et bien d'autres fonctionnalités.

git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

assurez-vous de mettre à jour la PAGERvariable, par exemple dans votre~/.bashrc

export PAGER="pspg -s 6" 

-sreprésente le jeu de couleurs ( 1-14). Si vous utilisez des référentiels pgdg, installez simplement un paquet (sur une distribution de type Debian):

sudo apt install pspg

exemple pspg

Tombart
la source
7

Assurez-vous également de vérifier \ H, qui active / désactive la sortie HTML. Pas nécessairement facile à lire sur la console, mais intéressant pour le dumping dans un fichier (voir \ o) ou le collage dans une fenêtre d'éditeur / navigateur pour le visualiser, en particulier avec plusieurs lignes de données relativement complexes.

Wexxor
la source
1

vous pouvez utiliser la zénité pour afficher la sortie de la requête sous forme de tableau html.

  • implémentez d'abord le script bash avec le code suivant:

    cat> '/tmp/sql.op'; zenity --text-info --html --filename = '/ tmp / sql.op';

    enregistrez-le comme mypager.sh

  • Exportez ensuite la variable d'environnement PAGER en définissant le chemin d'accès complet du script comme valeur.

    par exemple: - export PAGER = '/ path / mypager.sh'

  • Connectez-vous ensuite au programme psql puis exécutez la commande \ H

  • Et enfin, exécutez n'importe quelle requête, la sortie présentée s'affichera dans la zénité au format de table html.

purushothaman poovai
la source