2017-05-29 45 views
1

使用下列內容:錯誤在Postgres的關係ALTER TYPE不存在

CREATE TYPE user_types AS ENUM ('it', 'accounting', 'processes'); 

CREATE TABLE my_users 
(
    my_user_id integer NOT NULL, 
    my_user_name text NOT NULL, 
    my_user_type user_types 
) 

我想改變用戶類型之一:

ALTER TYPE user_types RENAME ATTRIBUTE it TO softwaredev CASCADE; 

我得到一個錯誤:

ERROR: relation "user_types" does not exist 
SQL state: 42P01 

我試着添加引號和反引號,但沒有幫助。我在這裏寫下的例子不是確切的代碼,我的類型有31個字符,但我認爲我的類型的長度不是問題。

我使用Postgres的版本9.6.2

回答

2

ALTER TYPE ... RENAME ATTRIBUTE僅適用於複合類型,而不是爲ENUM類型。

雖然有辦法將新條目添加到此類型(ALTER TYPE ... ADD VALUE 'new_value'),但是沒有支持的方式來刪除或重命名枚舉條目。

如果你不害怕與目錄一塌糊塗,你可以嘗試爲超級用戶:

UPDATE pg_enum 
SET enumlabel = 'softwaredev' 
WHERE enumtypid = 'user_types'::regtype 
    AND enumlabel = 'it'; 

和PostgreSQL V10上,你可以使用

ALTER TYPE ... RENAME VALUE ... TO ... 
+0

啊......太糟糕了。所以它要麼搞亂目錄,要麼創建一個新的類型並刪除舊的。感謝您的回答!! – DeniseMeander

+1

@DeniseMeander隨着即將發佈的Postgres 10,你可以重命名枚舉值:https://www.postgresql.org/docs/10/static/sql-altertype.html –

+0

謝謝。我將它添加到答案中。 –

相關問題