psql: SELECT *… sauf une colonne


10

Je recherche un moyen simple de sélectionner toutes les colonnes sauf une en psql.

Avec psqlje veux dire la ligne de commande interactive.

Je serais heureux avec un outil qui se développe *en une liste de noms de colonnes cités. Ensuite, je pourrais retirer la colonne à retirer à la main.

Ma question concerne simplement l'utilisation interactive de psql. Ce n'est pas un doublon de questions de personnes mécontentes du standard sql et qui veulent exécuter quelque chose comme "select * -foo".


3
Il n'y en a pas, désolé. Vous pouvez interroger information_schemavia une fonction pl / pgsql pour générer une liste assez facilement, mais de cette façon, ce serait deux requêtes.
Craig Ringer

2
La plupart des outils GUI peuvent le faire. Mais si vous voulez (ou devez) vous en tenir à la ligne de commande, cela vous aidera peut-être: github.com/dbcli/pgcli
a_horse_with_no_name

@a_horse_with_no_name Je voudrais accepter votre "réponse". Pourriez-vous s'il vous plaît poster une réponse et expliquer l'utilisation de l'outil pgcli pour résoudre la question.
guettli

sauf quelle colonne? le dernier? le premier? Ou au hasard?
BAE

1
@ChengchengPei: il n'y a pas de desccommande danspsql
a_horse_with_no_name

Réponses:


4

Pour obtenir la liste des colonnes dans l'ordre par défaut, sans la mauvaise colonne:

SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytable'::regclass
AND    NOT attisdropped  -- no dropped (dead) columns
AND    attnum > 0        -- no system columns
AND    attname <> 'bad_column'  -- case sensitive!

Ou tout simplement WHERE attrelid = 'mytable'::regclasssi vous faites confiance au chemin de recherche pour résoudre le bon schéma.

quote_ident() ajoute des guillemets si nécessaire.

J'ai posé la même question en 2007 sur pgsql-general . C'était Postgres 8.2 à l'époque. Doux souvenirs ...

En relation:


1
Cela ressemble à un élément à faire, pour ajouter une commande de barre oblique inverse à psql qui émettra une chaîne qui est une liste de toutes les colonnes d'une table, entre guillemets appropriés. Et vous pourriez lui faire omettre toutes les colonnes qui ont été incluses comme arguments supplémentaires à la commande. Donc hypothétiquement \dq thetable bad_column.
jjanes

@jjanes: Je ne suis pas sûr qu'il puisse générer suffisamment de demande pour convaincre les développeurs principaux d'allouer la lettre gratuite qpour la tâche. Peut-être une option générale à toute la famille de \dcommandes pour afficher une liste nue de noms concaténés? Comme \d- tbl(mnémonique: l'opposé de \d+, qui montre plus de détails). Cela permettrait d'obtenir essentiellement n'importe quelle liste d'objets nus. Les tableaux dans un schéma: \dt- public.*, les fonctions commençant par « f_foo »: \df- f_foo*etc. - ou des colonnes dans un tableau: \d- mytbl. Similaire à ce que fait la commande shell ls...
Erwin Brandstetter

Je te donne la prime. Mais quelque chose d'intégré dans psql serait vraiment une fonctionnalité intéressante. Merci Erwin :-)
guettli

0

Je pense avoir trouvé ce que vous cherchez mais je ne l'ai pas testé moi-même.

Il existe un logiciel appelé SequelPro qui vous permettrait de sélectionner les champs d'une table donnée mais ce n'est que pour MySQL. Veuillez lire ci-dessous quelque part au milieu de la page:

http://www.sequelpro.com/docs/Working_with_Query_Favorites

Il existe un autre logiciel appelé PSequel qui ne fonctionne que sur Mac et prétend qu'il est de type SequelPro conçu pour Postgres:

http://www.psequel.com/

J'espère que cela t'aides.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.