Comment désactiver l'en-tête uniquement dans psql (postgresql)

18

J'utilise PostgreSQL 9.1.X

J'essaie de créer un psqlscript pour imprimer les résultats sans en-tête mais avec un pied de page.

http://www.postgresql.org/docs/9.1/static/app-psql.html

Extrait du document ci-dessus

\pset tuples_only

désactivera l'en-tête et le pied de page. et

\pset footer off

désactivera le pied de page uniquement.

Existe-t-il un moyen psqlde désactiver l'en-tête et de conserver le pied de page?

Je sais qu'il existe de nombreuses façons de contourner ce problème en utilisant shell / perl / quel que soit l'outil de texte que vous aimez, mais je me demande pourquoi il y a une configuration pour le pied de page mais pas pour l'en-tête?

id <--this line I don't want
---- <-- this line I don't want either
 1  <-- this line, yes
(1 row) <-- yes, I want it!
skong
la source
Êtes-vous sous Unix? Si oui, vous pouvez utiliser head / tail / grep / awk / sed / un million d'autres choses
Philᵀᴹ

Réponses:

10

Lors de l'exécution à psqlpartir du shell, vous pouvez utiliser l' -toption (imprime les tuples uniquement):

$ psql -t -c "SELECT version();"
 PostgreSQL 9.5.5 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit

Au sein de l' psqlutilisation \tpour désactiver l' impression nombre d' en- tête et la ligne.

Tombart
la source
7

Ma solution n'est pas tout à fait de désactiver, mais plutôt de supprimer les en-têtes.

Vous pouvez essayer tailla sortie de la requête:

\o | tail -n +2

Avec \o, vous pouvez rediriger la sortie vers un fichier ou un canal, comme dans ce cas. Cette solution a aussi son défaut: au moins dans mon cas, après l'exécution de SELECT [...], je ne reviens à une invite que si j'appuie sur une touche. Et la première ligne de sortie apparaît après une invite. Si vous redirigez ensuite la sortie vers un fichier, cela ne devrait pas poser de problème.

Ce comportement peut être évité si vous définissez la PAGERvariable d'environnement de manière appropriée et utilisez toujours le pager psql:

$ export PAGER='tail -n +3'

$ psql -U postgres -d test
psql (9.1.4, server 9.1.5)

test=# \pset pager always
Pager is always used.

test=# select * from a;
  2 | b
  3 | b
(2 rows)

Dans la psqlversion fournie avec PostgreSQL 9.2, vous pouvez utiliser la \setenvcommande pour plus de commodité (je veux dire que vous n'avez pas besoin de définir une variable env qui peut également affecter d'autres applications).

dezso
la source
bon hack, bon à savoir l'option pager. mais vraiment il n'y a pas d'option pour l'en-tête lui-même? Je devrais peut-être vérifier la messagerie de postgresql
skong
@sinbadblue Non. Comme vous l'avez déjà vérifié, non. Vous pouvez cependant publier une demande de fonctionnalité :) serait un progrès utile.
dezso
5

Vous devez ajouter une option de ligne de commande psql -P "footer=off". Cette option conserve les titres des colonnes dans le résultat.

Karen Muñoz
la source
Lisez la question.
Colin 't Hart