web-dev-qa-db-fra.com

Comment masquer la décoration du jeu de résultats dans la sortie Psql

Comment masquer les noms de colonnes et le nombre de lignes dans la sortie de psql?

J'exécute une requête SQL via psql avec:

psql --user=myuser -d mydb --output=result.txt -c "SELECT * FROM mytable;"

et j'attends une sortie comme:

1,abc
2,def
3,xyz

mais à la place je reçois:

id,text
-------
1,abc
2,def
3,xyz
(3 rows)

Bien sûr, il n'est pas impossible de filtrer les deux lignes du haut et du bas après le fait, mais existe-t-il un moyen de le faire avec uniquement psql? En lisant sa page de manuel, je vois des options pour contrôler le délimiteur de champ, mais rien pour masquer la sortie étrangère.

59
Cerin

Vous pouvez utiliser le -t ou --tuples-only option:

psql --user = myuser -d mydb --output = result.txt -t -c "SELECT * FROM mytable;"

Modifié (plus d'un an plus tard) pour ajouter:

Vous pouvez également vouloir vérifier la commande COPY . Je n'ai plus d'instances PostgreSQL à portée de main pour tester, mais je pense que vous pouvez écrire quelque chose dans ce sens:

psql --user = myuser -d mydb -c "COPIER ma table vers 'result.txt' DELIMITER ','"

(excepté result.txt devra être un chemin absolu). La commande COPY prend également en charge un format CSV plus intelligent; voir sa documentation .

71
ruakh

Vous pouvez également rediriger la sortie depuis psql et utiliser la même option. Utilisez\o pour définir le fichier de sortie et\t pour sortir uniquement les tuples (ou \pset pour désactiver uniquement le "pied de page" du nombre de lignes).

\o /home/flynn/queryout.txt
\t on
SELECT * FROM a_table;
\t off
\o

Alternativement,

\o /home/flynn/queryout.txt
\pset footer off
. . .
17
epic_fil