我需要知道 PostgreSQL 中的列类型(即varchar(20)
)。我知道我可能会使用\d
psql 中的某些东西找到它,但我需要通过选择查询来完成它。
这在 PostgreSQL 中可能吗?
问问题
13398 次
3 回答
11
PostgreSQL 中有一种更简单的方法来获取列的类型。
SELECT pg_typeof(col)::text FROM tbl LIMIT 1
当然,该表必须至少包含一行。而且您只能获得没有类型修饰符(如果有)的基本类型。如果您也需要,请使用下面的替代方法。
您也可以将该函数用于常量。上的手册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()
关于对象标识符类型的手册,例如regclass
.
于 2011-10-26T09:06:32.170 回答
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 客户端
$ psql -E
然后一个简单的\d mytable
将输出 postgres 用来描述表的查询。它适用于每个 psql describe 命令。
于 2010-12-02T14:56:52.917 回答
2
是的,看看information_schema。
于 2010-12-02T14:56:08.827 回答