PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để xóa một giá trị kiểu enum trong postgres?

Bạn xóa (thả) các loại enum giống như bất kỳ loại nào khác, với DROP TYPE :

DROP TYPE admin_level1;

Có thể là bạn đang thực sự hỏi về cách xóa một giá trị riêng lẻ khỏi kiểu enum ? Nếu vậy, bạn không thể. Nó không được hỗ trợ:

Mặc dù enum kiểu chủ yếu dành cho các tập giá trị tĩnh, có hỗ trợ thêm giá trị mới vào kiểu enum hiện có và để đổi tên giá trị (xem ALTER TYPE ). Không thể xóa các giá trị hiện có khỏi kiểu enum, cũng như không thể thay đổi thứ tự sắp xếp của các giá trị đó, thiếu sót và tạo lại kiểu enum.

Bạn phải tạo một loại mới không có giá trị, chuyển đổi tất cả các mục đích sử dụng hiện có của loại cũ sang sử dụng loại mới, sau đó bỏ loại cũ.

Ví dụ:

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. PostgreSQL INSERT ON CONFLICT UPDATE (upert) sử dụng tất cả các giá trị bị loại trừ

  2. Cách kết nối với máy chủ PostgreSQL từ máy ảo vagrant

  3. PostgreSQL - Mệnh đề GROUP BY

  4. Chủ sở hữu cơ sở dữ liệu postgresql không thể truy cập cơ sở dữ liệu - Không tìm thấy quan hệ nào.

  5. Cách ghi khung dữ liệu Pandas vào mô hình Django