PostgreSQL:如何列出所有可用的数据类型?

19

以下是Postgresql 9.5的内置类型列表: https://gist.github.com/sparebytes/f94867c15059a61ef69dd1882b36c1f6 - sparebytes
2个回答

33
在PostgreSQL中,“数据类型”实际上包括基本(内置)类型、扩展添加的类型、用户定义的复合类型、域和表行类型。不清楚您对其中哪些感兴趣。给定数据库中可用的所有类型都列在该数据库的pg_catalog.pg_type中,因此您可能需要过滤结果。请参见 pg_type系统目录表的文档
未安装扩展的类型不会被列出。无法列出当前数据库中未安装的扩展提供的类型。
要获得更漂亮的类型列表,请使用psql\dT *命令。您可以通过使用-E标志运行psql来查看执行此操作的底层SQL:
$ psql -E regress
regress=> \dT *
********* QUERY **********
SELECT n.nspname as "Schema",
  pg_catalog.format_type(t.oid, NULL) AS "Name",
  pg_catalog.obj_description(t.oid, 'pg_type') as "Description"
FROM pg_catalog.pg_type t
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid))
  AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
  AND pg_catalog.pg_type_is_visible(t.oid)
ORDER BY 1, 2;
**************************

你知道内置类型的OID在服务器实例和版本之间是否一致吗?例如,date类型始终是1082吗? - ps2goat
1
@ps2goat 对于内置的非扩展类型,是的,OID是一致的,但您不应该在任何分发、期望可移植等方面依赖此功能。这并不能保证它会一直保持不变。 - Craig Ringer

18

你想列出特定数据库中的所有类型,还是列出Postgres中可用的所有数据类型? - Borys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接