PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak usunąć wartość typu enum w postgresie?

Usuwasz (upuszczasz) typy wyliczeniowe, jak każdy inny, za pomocą DROP TYPE :

DROP TYPE admin_level1;

Czy to możliwe, że faktycznie pytasz, jak usunąć pojedynczą wartość z typu wyliczenia ? Jeśli tak, nie możesz. Nie jest obsługiwane:

Chociaż enum typy są przeznaczone głównie dla statycznych zestawów wartości, istnieje wsparcie dla dodawania nowych wartości do istniejącego typu wyliczenia oraz dla zmiany nazw wartości (zobacz ALTER TYPE ). Istniejących wartości nie można usunąć z typu wyliczenia ani nie można zmienić kolejności sortowania takich wartości, z wyjątkiem usunięcia i ponownego utworzenia typu wyliczenia.

Musisz utworzyć nowy typ bez wartości, przekonwertować wszystkie istniejące zastosowania starego typu na nowy typ, a następnie usunąć stary typ.

Np.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porównaj tablice pod kątem równości, ignorując kolejność elementów

  2. Brak mapowania dialektu dla typu JDBC:2003

  3. Pula połączeń PostgreSQL:część 2 – PgBouncer

  4. Pominięcie podwójnego cudzysłowu w celu wykonania zapytania w PostgreSQL

  5. IntegrityError:rozróżnij unikalne ograniczenie od niezerowych naruszeń