7

我需要知道 PostgreSQL 中的列类型(即varchar(20))。我知道我可能会使用\dpsql 中的某些东西找到它,但我需要通过选择查询来完成它。
这在 PostgreSQL 中可能吗?

4

3 回答 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 回答