我试图使用information_schema找到等效的\ dT的SQL,似乎找不到任何东西.这样的事情存在吗?
示例:如果我添加以下自定义类型枚举,如何在information_schema中看到它?
CREATE TYPE communication.channels AS ENUM
('text_message',
'email',
'phone_call',
'broadcast');
Run Code Online (Sandbox Code Playgroud)
注意:我确实有\ dT使用的确切SQL(通过打开日志记录检索)但我正在寻找使用information_schema的更清洁的实现
Col*_*ers 45
作为参考,这里是来自\ 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')
Run Code Online (Sandbox Code Playgroud)
Gui*_*ido 20
这是列出当前数据库中所有枚举定义类型的简单方法.查询结果返回两列,第一列显示每个枚举类型的名称,第二列显示每个枚举类型的每个值的名称:
SELECT pg_type.typname AS enumtype,
pg_enum.enumlabel AS enumlabel
FROM pg_type
JOIN pg_enum
ON pg_enum.enumtypid = pg_type.oid;
Run Code Online (Sandbox Code Playgroud)
Vad*_*sov 14
列出所有数据库类型:
test=# \dT
List of data types
Schema | Name | Description
--------+---------------------+-------------
public | gender |
public | status |
Run Code Online (Sandbox Code Playgroud)
列出所有数据库类型以及值等附加信息:
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 | | |
Run Code Online (Sandbox Code Playgroud)
获取具有附加信息的特定类型:
leps=# \dT+ gender
List of data types
Schema | Name | Internal name | Size | Elements | Owner | Access privileges | Description
--------+------------+---------------+------+-------------------+-------+-------------------+-------------
public | gender | gender | 4 | male +| Vadim | |
| | | | female +| | |
Run Code Online (Sandbox Code Playgroud)
枚举不在SQL标准中,因此不在信息模式中表示.其他用户定义的类型通常在视图中user_defined_types,但是没有实现.所以目前,您无法使用信息模式在PostgreSQL中列出用户定义的类型.
由您的自我类型定义的所有列表:
\dT
testDB=> \dT
List of data types
Schema | Name | Description
--------+-------------------------+-------------
public | myType |
(1 row)
Run Code Online (Sandbox Code Playgroud)
我使用视图来显示我的枚举名称。因此,可以在应用程序中使用该视图中的数据为枚举字段提供可用选项列表。
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;Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32451 次 |
| 最近记录: |