假设我们已经定义了一个postgresql类型:
CREATE TYPE my_type AS ENUM('foo', 'bar');
Run Code Online (Sandbox Code Playgroud)
有没有办法在创建后显示类型定义?
我希望"\ d my_type"能够显示"ENUM('foo','bar')",但它说:
Did not find any relation named "my_type"
Run Code Online (Sandbox Code Playgroud)
pg_type表似乎没有提供足够的信息.
Ada*_*11p 85
检查一下:
select enum_range(null::my_type)
Run Code Online (Sandbox Code Playgroud)
我认为这是一个更简单的解决方案:).
Ric*_*ton 84
它是你所追求的,但并没有将它作为"创建"声明.您对域使用\ 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)
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 13
如果您只需要全名(类型名称和架构)以及所有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;
Run Code Online (Sandbox Code Playgroud)
返回:
schema | typname | enum_labels
--------+--------------+-------------
public | my_enum_type | foo|bar
Run Code Online (Sandbox Code Playgroud)
string_agg()需要Postgres 9.0或更高版本,替换array_agg()旧版本.
要获取SQL CREATE语句,您可以使用pg_dump并查看转储文件.
或者,实际上,使用pgAdmin为数据库中的任何对象显示反向工程SQL创建脚本.在中选择它,object browser其创建脚本显示在SQL pane.甚至可以选择将脚本复制到新打开的SQL editor自动窗口,您可以在其中编辑和执行它.
| 归档时间: |
|
| 查看次数: |
35374 次 |
| 最近记录: |