Comment obtenir le type de données d'un champ spécifique à partir d'une table dans postgres? Par exemple, j'ai le tableau suivant, student_details (stu_id integer, stu_name varchar (30), join_date timestamp);
Dans ce cas en utilisant le nom du champ / ou de toute autre manière, je dois obtenir le type de données du champ spécifique. Y a-t-il une possibilité?
postgresql
Nathan Villaescusa
la source
la source
Réponses:
Vous pouvez obtenir des types de données à partir de l' information_schema (documentation 8.4 référencée ici, mais ce n'est pas une nouvelle fonctionnalité):
la source
where table_catalog = ? and table_schema = ? and table_name = ?;
Mais cette vue information_schema ne considère pas que le DDL a pu utiliser des domaines .pg_typeof
Vous pouvez utiliser la fonction pg_typeof () , qui fonctionne également bien pour les valeurs arbitraires.
la source
SELECT pg_typeof( date_part( 'year', now() ) ) AS expr
est probablement différent de ce à quoi vous vous attendez.pg_typeof
fonctionne pour les champs provenant de procédures stockées, pour lesquels la table backend, si elle existe même, est inconnue / peu claire.select state, qstart, pg_typeof(qstart) as ty_qstart from listconn()
. information_schema n'aiderait pas beaucoup ici.Essayez cette demande:
la source
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';
courir
psql -E
et puis\d student_details
la source
Si vous aimez la solution 'Mike Sherrill' mais que vous ne voulez pas utiliser psql, j'ai utilisé cette requête pour obtenir les informations manquantes:
avec résultat:
la source
Les vues de schéma d'informations et pg_typeof () renvoient des informations de type incomplètes. Parmi ces réponses,
psql
donne les informations de type les plus précises. (Le PO n'a peut-être pas besoin d'informations aussi précises, mais devrait connaître les limites.)Utiliser
psql
et\d public.test
montre correctement l'utilisation du type de donnéestest_domain
, la longueur des colonnes varchar (n), ainsi que la précision et l'échelle des colonnes numériques (p, s).Cette requête sur une vue information_schema ne montre pas du tout l'utilisation de
test_domain
. Il ne rapporte pas non plus les détails des colonnes varchar (n) et numeric (p, s).Vous pourrez peut- être obtenir toutes ces informations en joignant d'autres vues information_schema ou en interrogeant directement les tables système.
psql -E
pourrait aider avec cela.La fonction
pg_typeof()
montre correctement l'utilisation detest_domain
, mais ne rapporte pas les détails des colonnes varchar (n) et numeric (p, s).la source
Extraire le type de données depuis
information_schema
est possible, mais pas pratique (nécessite de joindre plusieurs colonnes avec unecase
instruction). Vous pouvez également utiliser uneformat_type
fonction intégrée pour ce faire, mais cela fonctionne sur les identificateurs de type internes qui sont visibles danspg_attribute
mais pas dansinformation_schema
. ExempleBasé sur https://gis.stackexchange.com/a/97834 .
la source
b.relfilenode
parb.oid