我需要知道PostgreSQL中的列类型(例如varchar(20)
)。 我知道我可以在psql中使用\d
来查找,但我需要通过select查询来完成。
在PostgreSQL中是否有可能做到这一点?
我需要知道PostgreSQL中的列类型(例如varchar(20)
)。 我知道我可以在psql中使用\d
来查找,但我需要通过select查询来完成。
在PostgreSQL中是否有可能做到这一点?
在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
)的手册。
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命令。
c.relname ~ '^(TABLENAME)$'
等同于 c.relname = 'TABLENAME'
。不过回答得很好。 - mu is too short