256 votes

Sélectionner le type de données du champ dans postgres

Comment puis-je obtenir le type de données d'un champ spécifique d'une table dans postgres ? Par exemple J'ai la table suivante, student_details ( stu_id integer, stu_name varchar(30 ), joined_date timestamp ) ;

En utilisant le nom du champ / ou tout autre moyen, je dois obtenir le type de données du champ spécifique. Y a-t-il une possibilité ?

262voto

Wayne Conrad Points 31052

Vous pouvez obtenir des types de données à partir de la information_schema (Les documents de la version 8.4 sont référencés ici, mais il ne s'agit pas d'une nouvelle fonctionnalité) :

=# select column_name, data_type from information_schema.columns
-# where table_name = 'config';
    column_name     | data_type 
--------------------+-----------
 id                 | integer
 default_printer_id | integer
 master_host_enable | boolean
(3 rows)

229voto

Nathan Villaescusa Points 6750

Vous pouvez utiliser le pg_typeof() qui fonctionne également bien pour les valeurs arbitraires.

SELECT pg_typeof("stu_id"), pg_typeof(100) from student_details limit 1;

67voto

Romulo Freires Points 631

Essayez cette demande :

SELECT column_name, data_type FROM information_schema.columns WHERE 
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';

50voto

Exécuter psql -E et ensuite \d student_details

20voto

Fil Points 164

Si vous aimez la solution de Mike Sherrill mais ne voulez pas utiliser psql, j'ai utilisé cette requête pour obtenir les informations manquantes :

select column_name,
case 
    when domain_name is not null then domain_name
    when data_type='character varying' THEN 'varchar('||character_maximum_length||')'
    when data_type='numeric' THEN 'numeric('||numeric_precision||','||numeric_scale||')'
    else data_type
end as myType
from information_schema.columns
where table_name='test'

avec le résultat :

column_name |     myType
-------------+-------------------
 test_id     | test_domain
 test_vc     | varchar(15)
 test_n      | numeric(15,3)
 big_n       | bigint
 ip_addr     | inet

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X