我试图使用information_schema找到等效的\ dT的SQL,但似乎找不到任何东西。这样的事情存在吗?
示例:如果我添加以下自定义类型枚举,如何在information_schema中看到它?
CREATE TYPE communication.channels AS ENUM
('text_message',
'email',
'phone_call',
'broadcast');
注意:我确实拥有\ dT使用的确切SQL(通过打开日志记录检索)但我正在寻找使用information_schema的更清晰的实现
答案 0 :(得分:42)
作为参考,这里是来自\ dT的SQL(pgAdmin使用相同或类似的)
SELECT n.nspname as schema, t.typname as type
FROM 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 n.nspname NOT IN ('pg_catalog', 'information_schema')
答案 1 :(得分:17)
这是列出当前数据库中所有枚举定义类型的简单方法。查询结果返回两列,第一列显示每个枚举类型的名称,第二列显示每个枚举类型的每个值的名称:
SELECT pg_type.typname AS enumtype,
pg_enum.enumlabel AS enumlabel
FROM pg_type
JOIN pg_enum
ON pg_enum.enumtypid = pg_type.oid;
答案 2 :(得分:8)
枚举不在SQL标准中,因此未在信息架构中表示。其他用户定义的类型通常位于视图user_defined_types
中,但未实现。所以目前,您无法使用信息模式在PostgreSQL中列出用户定义的类型。
答案 3 :(得分:8)
您的自我类型定义的所有列表:
\dT
testDB=> \dT
List of data types
Schema | Name | Description
--------+-------------------------+-------------
public | myType |
(1 row)
答案 4 :(得分:8)
列出所有数据库类型:
test=# \dT
List of data types
Schema | Name | Description
--------+---------------------+-------------
public | gender |
public | status |
列出所有数据库类型以及值:
等附加信息test=# \dT+
List of data types
Schema | Name | Internal name | Size | Elements | Owner | Access privileges | Description
--------+---------------------+---------------------+------+-------------------+-------+-------------------+-------------
public | gender | gender | 4 | male +| Vadim | |
| | | | female | | |
public | status | status | 4 | processing +| Vadim | |
| | | | passed +| | |
| | | | failed | | |
获取具有其他信息的特定类型:
leps=# \dT+ gender
List of data types
Schema | Name | Internal name | Size | Elements | Owner | Access privileges | Description
--------+------------+---------------+------+-------------------+-------+-------------------+-------------
public | gender | gender | 4 | male +| Vadim | |
| | | | female +| | |
答案 5 :(得分:3)
我使用视图来显示我的枚举名称。因此,该视图中的数据可以在应用程序中使用,以提供枚举字段的可用选项列表。
CREATE OR REPLACE VIEW vw_enums AS
SELECT t.typname, e.enumlabel, e.enumsortorder
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid;
答案 6 :(得分:0)
看看这里:http://www.postgresql.org/docs/current/static/catalog-pg-enum.html
pg_enum目录应该包含您正在查找的数据