Sélectionnez le type de données du champ dans postgres
Comment puis-je obtenir le type de données de champ de la table dans postgres ?
Par exemple
J'ai le tableau suivant,
student_details (
stu_id entier,
stu_name varchar(30 ),
joined_date timestamp
);
En utilisant le nom du champ /ou de toute autre manière, je dois obtenir le type de données du champ. Est-il possible ?
- Également demandé & répondu stackoverflow.com/q/20194806/65458
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir les types de données à partir de la information_schema (8.4 docs référencé ici, mais ce n'est pas une nouvelle fonctionnalité):
where table_catalog = ? and table_schema = ? and table_name = ?;
Mais ce information_schema vue ne considère pas que le DDL pourrait avoir utilisé domaines>.pg_typeof
Vous pouvez utiliser le pg_typeof() fonction, qui fonctionne aussi bien pour des valeurs arbitraires.
SELECT pg_typeof( date_part( 'year', now() ) ) AS expr
est probablement différent de ce que vous attendez.exécuter
psql -E
et puis\d student_details
psql
et que vous voulez utiliser ses commandes.Essayer cette demande :
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';
Si vous aimez 'Mike Sherrill solution, mais ne voulez pas utiliser psql, j'ai utilisé cette requête pour obtenir l'information manquante:
avec le résultat:
Les informations de schéma de vues et pg_typeof() retourne les informations de type incomplet. De ces réponses,
psql
donne le plus précis des informations de type. (Les OP pourraient ne pas avoir besoin de ces informations précises, mais doit connaître les limites.)À l'aide de
psql
et\d public.test
montre bien l'utilisation du type de donnéestest_domain
, la longueur de varchar(n) des colonnes, et la précision et l'échelle de numeric(p, s) colonnes.Cette requête à l'encontre d'un information_schema vue ne pas montrent que l'utilisation de
test_domain
à tous. Il également ne pas présenter les détails de varchar(n) et numeric(p, s) colonnes.Vous pourrait être en mesure d'obtenir toutes ces informations en se joignant à d'autres vues information_schema, ou en interrogeant le système de tables directement.
psql -E
peut vous aider.La fonction
pg_typeof()
indique correctement l'utilisation detest_domain
, mais n'a pas de rapport les détails de varchar(n) et numeric(p, s) colonnes.Tirant le type de données à partir de
information_schema
est possible, mais pas pratique (nécessite l'adhésion de plusieurs colonnes avec uncase
déclaration). Alternativement, on peut utiliserformat_type
fonction intégrée pour le faire, mais il fonctionne sur type interne des identifiants qui sont visibles danspg_attribute
mais pas dansinformation_schema
. ExempleBasé sur https://gis.stackexchange.com/a/97834.
b.relfilenode
avecb.oid