有没有办法显示用户定义的postgresql枚举types定义?
假设我们已经定义了一个postgresqltypes:
CREATE TYPE my_type AS ENUM('foo', 'bar');
有什么办法来创build后显示types定义?
我期望“\ d my_type”向我展示“ENUM('foo','bar')”,但它说:
Did not find any relation named "my_type"
pg_type表似乎没有提供足够的信息。
这是你之后,但它并没有把它作为一个“创造”的声明。 您使用\ 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)
检查这个:
select enum_range(null::my_type)
我认为这是一个更简单的解决scheme:)。
如果您只想要全名(types名称和模式)和所有enum
标签的sorting列表,则此查询将执行:
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()
replace。
要获得SQL CREATE
语句,可以使用pg_dump
并查看转储文件。
或者,更实际的是,使用pgAdmin显示数据库中任何对象的反向工程SQL创build脚本。 在object browser
select它,并在SQL pane
显示其创build脚本。 甚至还可以select将脚本自动复制到SQL editor
的新打开的窗口中,然后在其中进行编辑和执行。
SELECT t.typname FROM pg_class c JOIN pg_attribute a ON c.oid = a.attrelid JOIN pg_type t ON a.atttypid = t.oid WHERE c.relname = 'your_type';
棘手的部分是,简单地从这些视图中select*不会在结果中获得OID。