2016-03-29 13 views
0

新しいユーザー定義のENUMタイプの可能な値として結果のタイプのリストを使用するために、すべての組み込みタイプとユーザー定義タイプを取得しています。クエリ結果からENUMタイプを作成する

SELECT pg_catalog.format_type(t.oid, NULL) into TYPES_NAMES 
FROM pg_catalog.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 pg_catalog.pg_type_is_visible(t.oid); 

どのように私は新しいENUMタイプを持つことができる可能な値として、結果の種類のリストを使用することができます。私はインラインでそれを行うことができ

ALTER TYPE name ADD VALUE 'value'; 

答えて

1

を使用しています

CREATE TYPE my_enum AS ENUM (....); 

Dmitriの答えに値thxを反復することによって、コマンドを実行します。

DO $$ 
DECLARE name text; 
BEGIN 
    -- create an empty type then add the possible values 
    EXECUTE 'CREATE TYPE data_types_enum AS ENUM()'; 
    FOR name IN 
    SELECT pg_catalog.format_type(t.oid, NULL) as TYPES_NAMES 
    FROM pg_catalog.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 pg_catalog.pg_type_is_visible(t.oid) 
    LOOP 
    -- add the possible types 
    EXECUTE 'ALTER TYPE data_types_enum ADD VALUE ''' ||name|| ''''; 
    END LOOP; 
END $$; 
+0

答えに感謝します。私は値を反復することでそれを行うことができました。 – saloua

0

:私はあなたがplpgsqlが内の値を反復し、とあなたの列挙に追加することができPostgreSQL 9.5.0

おかげ

関連する問題