sql >> Database >  >> RDS >> PostgreSQL

Hoe een enum-typewaarde in postgres te verwijderen?

U verwijdert (drop) enum-types zoals elk ander type, met DROP TYPE :

DROP TYPE admin_level1;

Is het mogelijk dat u daadwerkelijk vraagt ​​hoe u een individuele waarde uit een enum-type kunt verwijderen ? Zo ja, dan kan dat niet. Het wordt niet ondersteund:

Hoewel enum typen zijn voornamelijk bedoeld voor statische waardensets, er is ondersteuning voor het toevoegen van nieuwe waarden aan een bestaand enumtype en voor het hernoemen van waarden (zie ALTER TYPE ). Bestaande waarden kunnen niet worden verwijderd uit een enum-type, noch kan de sorteervolgorde van dergelijke waarden worden gewijzigd, behalve het laten vallen en opnieuw maken van het enum-type.

U moet een nieuw type maken zonder de waarde, alle bestaande vormen van gebruik van het oude type converteren naar het nieuwe type en vervolgens het oude type laten vallen.

Bijv.

CREATE TYPE admin_level1 AS ENUM ('classifier', 'moderator');

CREATE TABLE blah (
    user_id integer primary key,
    power admin_level1 not null
);

INSERT INTO blah(user_id, power) VALUES (1, 'moderator'), (10, 'classifier');

ALTER TYPE admin_level1 ADD VALUE 'god';

INSERT INTO blah(user_id, power) VALUES (42, 'god');

-- .... oops, maybe that was a bad idea

CREATE TYPE admin_level1_new AS ENUM ('classifier', 'moderator');

-- Remove values that won't be compatible with new definition
-- You don't have to delete, you might update instead
DELETE FROM blah WHERE power = 'god';

-- Convert to new type, casting via text representation
ALTER TABLE blah 
  ALTER COLUMN power TYPE admin_level1_new 
    USING (power::text::admin_level1_new);

-- and swap the types
DROP TYPE admin_level1;

ALTER TYPE admin_level1_new RENAME TO admin_level1;


  1. Laravel-migratiefout:syntaxisfout of toegangsfout:1071 Opgegeven sleutel was te lang; maximale sleutellengte is 767 bytes

  2. De kunst van het aggregeren van gegevens in SQL van eenvoudige tot glijdende aggregaties

  3. Pincode-database van India met locatiezoekerscript in php en jQuery

  4. SQLite Self-Join