2010-09-07 46 views
27

我正在嘗試使用information_schema查找\ dT的等效SQL,並且似乎找不到任何東西。這樣的事情存在嗎?如何使用Postgres列出自定義類型information_schema

例如:如果我添加下面的自定義類型枚舉,我怎麼能在information_schema中看到它?

CREATE TYPE communication.channels AS ENUM 
    ('text_message', 
    'email', 
    'phone_call', 
    'broadcast'); 

注:我確實有通過\的dT使用的確切SQL(通過調高日誌檢索到的),但我現在用的是INFORMATION_SCHEMA

+0

如果你不想使用命令行,pgAdmin的能做到這一點 – DrColossos 2010-09-08 16:57:09

+0

一個超級「乾淨」的方式是包裹在查詢一個看法。也保存查詢,所以你不必每次都不停地使用它,呵呵http://albertech.blogspot.com/2016/12/show-all-custom-defined-types-in.html – jar 2016-12-13 02:45:59

回答

8

枚舉不在SQL標準中,因此不在信息模式中表示。其他用戶定義的類型通常位於視圖user_defined_types中,但尚未實現。因此,目前,您不能使用信息模式在PostgreSQL中列出用戶定義的類型。

35

供參考的數據,這裏是從\ 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') 
+0

此代碼顯示所有類型的列表,包括用戶定義的枚舉,但未提供如何定義它們的詳細信息。 – 2017-06-05 14:05:22

9

這是列出當前數據庫中所有枚舉定義類型的簡單方法。查詢結果返回兩列,第一個節目的名字每一個枚舉類型,第二場演出每個枚舉類型的每個值的名稱:

SELECT pg_type.typname AS enumtype, 
    pg_enum.enumlabel AS enumlabel 
FROM pg_type 
JOIN pg_enum 
    ON pg_enum.enumtypid = pg_type.oid; 
+1

'AS enumlabel'部分是多餘的,你不覺得嗎? – Pere 2017-02-15 15:38:47

2

我使用視圖來顯示我的名字的枚舉。來自該視圖的數據因此可以在應用程序中使用,以提供枚舉字段的可用選項列表。所有的

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

名單由你自定義類型:

\dT 

testDB=> \dT 
       List of data types 
Schema |   Name   | Description 
--------+-------------------------+------------- 
public | myType     | 
(1 row) 
相關問題