En mi base de datos de PostgreSQL, tengo un tipo de enumeración personalizado llamado " vegetables_type ". Contiene valores ('carrot', 'potato', 'tomato') . Mi tarea es agregar un nuevo valor a este tipo. Estoy buscando una declaración SQL para verificar si este nuevo valor ya existe en este tipo y, si no, agregue este valor, si existe, no haga nada.
He encontrado SELECT unnest(enum_range(NULL::vegetables_type)); declaración. Pero no puedo encontrar cómo operar en este resultado: no es posible aplicar WHERE , IN , ANY operación.
Mueva la llamada a unnest() a la cláusula FROM, luego puede usar la salida como cualquier otra tabla:
SELECT * FROM unnest(enum_range(NULL::vegetables_type)) as t(name) WHERE name::text = 'carrot'Para probar si existe un valor, puede usar, por ejemplo:
select exists (select * FROM unnest(enum_range(NULL::vegetables_type)) as t(name) WHERE t.name::text = 'new_item') Lo anterior devolverá true si new_item ya es miembro de la enumeración.
Pero no necesita una declaración tan complicada para empezar. Simplemente puede usar if not exists como parte de la instrucción ALTER:
alter type vegetables_type add value if not exists 'new_item';