PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menghapus nilai tipe enum di postgres?

Anda menghapus (menjatuhkan) jenis enum seperti jenis lainnya, dengan DROP TYPE :

DROP TYPE admin_level1;

Mungkinkah Anda benar-benar bertanya tentang cara menghapus nilai individual dari jenis enum ? Jika demikian, Anda tidak bisa. Ini tidak didukung:

Meskipun enum types terutama ditujukan untuk kumpulan nilai statis, ada dukungan untuk menambahkan nilai baru ke jenis enum yang ada, dan untuk mengganti nama nilai (lihat ALTER TYPE ). Nilai yang ada tidak dapat dihapus dari jenis enum, juga tidak dapat mengubah urutan pengurutan nilai tersebut, selain menjatuhkan dan membuat ulang jenis enum.

Anda harus membuat jenis baru tanpa nilai, konversi semua penggunaan yang ada dari jenis lama untuk menggunakan jenis baru, lalu hapus jenis lama.

Mis.

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. Cara memasukkan data ke dalam tabel menggunakan prosedur tersimpan di postgresql

  2. Variasi kinerja kueri SEPERTI PostgreSQL

  3. Gabungkan kueri loop bersarang ke hasil larik induk - pg-promise

  4. Pembaruan Postgresql dengan bergabung

  5. Apa yang ::lakukan di PostgreSQL?