Je cherche une information précise dans une base de données que je ne connais pas.
Il s'agit d'un produit tiers. Ils répondent lentement à certaines questions et je sais que les données se trouvent à l'intérieur de cette base de données. Je souhaite donc faire un peu d'ingénierie rétro.
Avec une table, est-il possible d’avoir une liste des noms des colonnes de cette table?
Par exemple, dans SqlServer, il est possible de vider une table dans une CREATE
instruction réutilisable , qui répertorie sous forme de texte toutes les colonnes composant la table.
postgresql
information-schema
catalogs
Stéphane Rolland
la source
la source
\dt[+] table_name
danspsql
.Réponses:
En plus de la ligne de commande que
\d+ <table_name>
vous avez déjà trouvée, vous pouvez également utiliser le schéma d'informations pour rechercher les données de colonne, en utilisantinformation_schema.columns
:Remarque: comme dans l'exemple ci-dessus, assurez-vous que les valeurs sont placées entre guillemets.
la source
\x on
ou\pset expanded on
pour rendre les résultats de la requête linéaires (au lieu de tabulaires) et ainsi plus faciles à lire stackoverflow.com/a/9605093/513397\d+ public.*
pour obtenir la description (schéma + indeces / fkeys / triggers) de toutes vos tables et vues dans lepublic
schéma. Nous l'utilisons dans notre script de hook pré-commit pour garder trace des modifications apportées à la base de données par chaque commit.En complément des autres réponses, même une instruction SELECT qui ne renvoie aucune ligne exposera les noms de colonne à vous et au code de l'application.
Les autorisations peuvent entrer en jeu avec l'une de ces approches.
la source
Le schéma d’information est la méthode la plus lente et la plus sûre: il est normalisé et largement transférable vers les autres bases de données qui le prennent en charge. Et cela continuera à fonctionner avec les principales versions.
Cependant, les vues dans le schéma d'information sont souvent associées à de nombreuses tables des catalogues système pour répondre à un format strictement normalisé, dont la plupart ne sont que du fret mort. Cela les ralentit .
Les développeurs de Postgres ne font pas de promesses, mais les bases (comme ce dont nous avons besoin ici) ne changeront pas d’une version à l’autre.
psql
(l'interface de ligne de commande native) prend la voie rapide, bien sûr, et interroge directement la source. Si vous commencezpsql
avec le paramètre-E
, le code SQL situé derrière les commandes antislash,\d
est affiché. Ou à\set ECHO_HIDDEN on
partir de la ligne de commande psql. À partir de là, vous pouvez élaborer une réponse à votre question.Plus rapide que l' interrogation
information_schema.columns
. EssayezEXPLAIN ANALYZE
de voir par vous-même. Peu importe encore pour une recherche ponctuelle. Mais cela pourrait faire la différence si utilisé dans une requête / fonction répétée plusieurs fois.Il existe également des différences subtiles de visibilité. Comparaison détaillée:
la source
-E
et montrez aux gens comment obtenir le SQL de psql.psql
sur PostgreSQL 11+Si vous êtes à la recherche pour les types de colonnes sur une requête, vous pouvez utiliser
psql
l »\gdesc
la source
PostgreSQL uniquement
Ceci est quelque peu hokey mais pourrait être un prétendant si vous recherchez le SQL le plus court possible:
ou même plus court (en supposant qu'il y a au moins une ligne présente dans le tableau)
La liste conserve l'ordre. Si vous ne vous souciez pas de la commande et que vous avez une
hstore
extension installée, vous pouvez faire encore plus rapidement.la source