假设我们已经定义了一个postgresql类型:
CREATE TYPE my_type AS ENUM('foo', 'bar');
创建后有什么方法可以显示类型定义?
我希望“ \ d my_type”向我显示“ ENUM('foo','bar')”,但是它说:
Did not find any relation named "my_type"
pg_type表似乎没有提供足够的信息。
Answers:
\ dT是您所追求的,但没有将其作为“ CREATE”语句来提供。您将\ dD用于域。
\dT+ action.action_status
List of data types
Schema | Name | Internal name | Size | Elements | Description
--------+----------------------+---------------+------+----------+-------------
action | action.action_status | action_status | 4 | pending +|
| | | | live +|
| | | | done +|
| | | | notdone |
(1 row)
\dT+ my_enum;
。
检查一下:
select enum_range(null::my_type)
我认为这是一个简单得多的解决方案:)。
null:my_type
如果我的表被调用users
并且列status
和枚举类型为,我应该键入什么而不是enum_user_status
?我尝试了所有可以想到的组合,但一无所获。
null::enum_user_status
(很明显,我用了我的枚举名而不是enum_user_status
)。枚举所使用的表/列不涉及。
如果只需要全名(类型名称和架构)以及所有enum
标签的排序列表,则此查询将执行以下操作:
SELECT n.nspname AS "schema", t.typname
, string_agg(e.enumlabel, '|' ORDER BY e.enumsortorder) AS enum_labels
FROM pg_catalog.pg_type t
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
JOIN pg_catalog.pg_enum e ON t.oid = e.enumtypid
WHERE t.typname = 'my_enum_type'
GROUP BY 1,2;
返回值:
schema | typname | enum_labels
--------+--------------+-------------
public | my_enum_type | foo|bar
string_agg()
需要Postgres 9.0或更高版本,请替换array_agg()
为旧版本。
要获取SQLCREATE
语句,可以使用pg_dump
并查看转储文件。
或者,更实际地,使用pgAdmin,它为数据库中的任何对象显示反向工程的SQL创建脚本。在中选择它,object browser
其创建脚本显示在中SQL pane
。甚至还有一个选项可以将脚本复制到SQL editor
自动打开的新窗口中,您可以在其中编辑和执行它。
pgAdmin
默认启用以下查看类型:文件→选项→浏览器并检查Types
。