我需要知道PostgreSQL中的列类型(即varchar(20)
)。我知道我可能在psql中使用\d
找到了这个,但是我需要用select查询来完成它。
这在PostgreSQL中是否可行?
答案 0 :(得分:11)
在PostgreSQL中有一种更简单的方式来获取列的类型。
SELECT pg_typeof(col)::text FROM tbl LIMIT 1
当然,该表必须至少保留一行。并且您只获得没有类型修饰符(如果有)的基本类型。如果您需要,也可以使用下面的替代方案
您也可以将该函数用于常量。 manual on pg_typeof()
。
对于空(或任何)表,您可以使用查询系统目录pg_attribute
按顺序获取列的完整列表及其各自的类型:
SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified
AND NOT attisdropped
AND attnum > 0
ORDER BY attnum;
format_type()
和object identifier types上的手册,如regclass
。
答案 1 :(得分:9)
您可以使用postgres使用以下查询完整描述表:
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 ~ '^(TABLENAME)$'
AND pg_catalog.pg_table_is_visible(c.oid)
)
通过此操作,您将检索列名和数据类型。
也可以使用-E
选项
$ psql -E
然后一个简单的\d mytable
将输出postgres用来描述表的查询。它适用于每个psql describe命令。
答案 2 :(得分:2)
是的,请查看information_schema。