PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Renomear um valor de enumeração resulta em relação de tipo não encontrada


A renomeação de um valor de um enum só é suportada a partir do Postgres 10.

Conforme documentado no manual a> você tem que usar rename VALUE , não rename attribute para renomear o valor de um enum.

Os valores de enumeração também são constantes de string, não identificadores. Portanto, você precisa colocá-los entre aspas simples, não aspas duplas:
ALTER TYPE public.enum_subscription_sub_frequency RENAME VALUE 'BI-WEEKLY' TO 'BI_WEEKLY';

Se você se pergunta por que recebe um erro "tipo ... não existe" com a sintaxe errada:

Quando você usa a opção RENAME ATTRIBUTE isso indica que um tipo de objeto "regular" deve ser alterado, então o Postgres procura por um tipo de objeto "real".

Mas um "tipo enum" não é um "tipo de objeto" e, portanto, o Postgres reclama que "o tipo xyz não existe", em vez de um erro de sintaxe.