Avec la requête suivante, nous pouvons obtenir une liste des noms de colonnes et du type de données d'une table dans PostgreSQL.
sql
postgresql
sqldatatypes
Pratik
la source
la source
psql -E
et pour chaque commande anti-slash, le SQL respectif sera affiché avant le résultat de la commande.select column_name,data_type from information_schema.columns where table_name = 'table_name';
avec la requête ci-dessus, vous pouvez colonnes et son type de données
la source
geometry(Geometry,[SRID])
).table_catalog = 'my_database'
ettable_schema = 'my_schema'
pour obtenir uniquement des colonnes d'une table spécifique d'un schéma spécifique d'une base de données spécifique.SELECT a.attname as "Column", pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype" FROM pg_catalog.pg_attribute a WHERE a.attnum > 0 AND NOT a.attisdropped AND a.attrelid = ( SELECT c.oid FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relname ~ '^(hello world)$' AND pg_catalog.pg_table_is_visible(c.oid) );
Plus d'informations à ce sujet: http://www.postgresql.org/docs/9.3/static/catalog-pg-attribute.html
la source
c.relname ~ '^(hello world)$
au lieu de simplementc.relname = 'hello world'
?N'oubliez pas d'ajouter le nom du schéma au cas où vous auriez plusieurs schémas avec les mêmes noms de table.
SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name';
ou en utilisant psql:
la source
Mise à jour de la réponse Pratik pour prendre en charge plus de schémas et de nullables:
SELECT "pg_attribute".attname as "Column", pg_catalog.format_type("pg_attribute".atttypid, "pg_attribute".atttypmod) as "Datatype", not("pg_attribute".attnotnull) AS "Nullable" FROM pg_catalog.pg_attribute "pg_attribute" WHERE "pg_attribute".attnum > 0 AND NOT "pg_attribute".attisdropped AND "pg_attribute".attrelid = ( SELECT "pg_class".oid FROM pg_catalog.pg_class "pg_class" LEFT JOIN pg_catalog.pg_namespace "pg_namespace" ON "pg_namespace".oid = "pg_class".relnamespace WHERE "pg_namespace".nspname = 'schema' AND "pg_class".relname = 'table' );
la source
Une version qui prend en charge la recherche des noms de colonne et des types d'une table dans un schéma spécifique, et utilise des JOINs sans aucune sous-requête
SELECT pg_attribute.attname AS column_name, pg_catalog.format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS data_type FROM pg_catalog.pg_attribute INNER JOIN pg_catalog.pg_class ON pg_class.oid = pg_attribute.attrelid INNER JOIN pg_catalog.pg_namespace ON pg_namespace.oid = pg_class.relnamespace WHERE pg_attribute.attnum > 0 AND NOT pg_attribute.attisdropped AND pg_namespace.nspname = 'my_schema' AND pg_class.relname = 'my_table' ORDER BY attnum ASC;
la source
SELECT DISTINCT ROW_NUMBER () OVER (ORDER BY pgc.relname , a.attnum) as rowid , pgc.relname as table_name , a.attnum as attr, a.attname as name, format_type(a.atttypid, a.atttypmod) as typ, a.attnotnull as notnull, com.description as comment, coalesce(i.indisprimary,false) as primary_key, def.adsrc as default FROM pg_attribute a JOIN pg_class pgc ON pgc.oid = a.attrelid LEFT JOIN pg_index i ON (pgc.oid = i.indrelid AND i.indkey[0] = a.attnum) LEFT JOIN pg_description com on (pgc.oid = com.objoid AND a.attnum = com.objsubid) LEFT JOIN pg_attrdef def ON (a.attrelid = def.adrelid AND a.attnum = def.adnum) LEFT JOIN pg_catalog.pg_namespace n ON n.oid = pgc.relnamespace WHERE 1=1 AND pgc.relkind IN ('r','') AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' AND a.attnum > 0 AND pgc.oid = a.attrelid AND pg_table_is_visible(pgc.oid) AND NOT a.attisdropped ORDER BY rowid ;
la source
Pour rendre ce sujet «plus complet».
J'avais besoin des noms de colonne et des types de données sur une instruction SELECT (pas une table).
Si vous souhaitez effectuer cette opération sur une instruction SELECT au lieu d'une table existante réelle, vous pouvez effectuer les opérations suivantes:
DROP TABLE IF EXISTS abc; CREATE TEMPORARY TABLE abc AS -- your select statement here! SELECT * FROM foo -- end your select statement ; select column_name, data_type from information_schema.columns where table_name = 'abc'; DROP IF EXISTS abc;
Brève explication, il crée une table (temporaire) de votre instruction select, que vous pouvez 'appeler' via la requête fournie par (entre autres) @a_horse_with_no_name et @selva.
J'espère que cela t'aides.
la source
sans mentionner le schéma, vous pouvez également obtenir les détails requis Essayez cette requête->
sélectionnez nom_colonne, type_données dans schema_informations.colonnes où nom_table = 'nom_table';
la source
Pour obtenir des informations sur la colonne de la table, vous pouvez utiliser:
Pour obtenir des informations sur le type de données dans la table, vous pouvez utiliser:
la source
sélectionnez column_name, data_type dans information_schema.columns où table_name = 'your_table_name' et table_catalog = 'your_database_name' et table_schema = 'your_schema_name';
la source