Dav*_*vid 7 postgresql types dynamic-sql information-schema
我需要知道PostgreSQL中的列类型(即varchar(20)).我知道我可能会\d在psql中使用某些内容找到它,但我需要使用select查询来完成它.
这在PostgreSQL中是否可行?
Erw*_*ter 11
在PostgreSQL中有一种更简单的方法来获取列的类型.
SELECT pg_typeof(col)::text FROM tbl LIMIT 1
Run Code Online (Sandbox Code Playgroud)
当然,该表必须至少保持一行.并且您只获得没有类型修饰符(如果有)的基本类型.如果您需要,也可以使用下面的替代方案.
您也可以将该函数用于常量.该手动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;
Run Code Online (Sandbox Code Playgroud)
在手动format_type()和对象标识符的类型等regclass.
您可以使用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)
)
Run Code Online (Sandbox Code Playgroud)
通过此,您将检索列名称和数据类型.
也可以使用该-E选项启动psql客户端
$ psql -E
Run Code Online (Sandbox Code Playgroud)
然后一个简单的\d mytable输出postgres使用的查询来描述表.它适用于每个psql describe命令.
| 归档时间: |
|
| 查看次数: |
12758 次 |
| 最近记录: |