Bài viết này sẽ mô tả cách sử dụng câu lệnh PostgreSQL DROP SCHEMA để xóa một schema và các đối tượng của nó.
Sử dụng cú pháp:
DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ];
Trong cú pháp này:
- Chỉ định tên schema mà bạn muốn xóa sau từ khóa DROP SCHEMA.
- Sử dụng tùy chọn IF EXISTS để xóa chỉ trong trường hợp schema có tồn tại.
- Sử dụng tùy chọn RESTRICT để xóa chỉ trong trường hợp schema là trống (empty), tức là nó không có chứa đối tượng (table, view,…) nào bên trong. Theo mặc định, PostgreSQL sử dụng RESTRICT.
- Sử dụng CASCADE để xóa lược đồ và tất cả các đối tượng của nó như table, view,… và lần lượt tất cả các đối tượng phụ thuộc vào các đối tượng đó, mà không quan tâm schema có trống (empty) hay là không.
Để xóa schema, vai trò thực thi lệnh phải là superuser hoặc chủ sở hữu của schema. Nếu CASCADE được chỉ định, đối tượng sẽ bị xóa bất kể ai sở hữu nó.
Trước khi thực hiện các thao tác xóa schema, chúng ta sẽ kết nối đến database mydb để kiểm tra xem mydb đang có những schema nào.
#1/3: Sử dụng câu lệnh DROP SCHEMA để xóa một schema trống (empty)
DROP SCHEMA IF EXISTS myschema;
#2/3: Sử dụng câu lệnh DROP SCHEMA để xóa nhiều schema trống (empty)
DROP SCHEMA IF EXISTS myschema1, myschema2;
#3/3: Sử dụng câu lệnh DROP SCHEMA để xóa schema không trống (not empty)
Kiểm tra thông tin các đối tượng như table, view có trong schema schema_minhhoangblog:
\dt schema_minhhoangblog.* \dv schema_minhhoangblog.*
Nếu xóa schema bình thường như trên:
DROP SCHEMA schema_minhhoangblog;
thì sẽ bị thông báo lỗi:
ERROR: cannot drop schema scm because other objects depend on it
DETAIL: table schema_minhhoangblog.deliveries depends on schema schema_minhhoangblog
view schema_minhhoangblog.deliveries_view depends on schema schema_minhhoangblog
HINT: Use DROP … CASCADE to drop the dependent objects too.
Vì vậy, nếu schema không trống và bạn muốn xóa schema và các đối tượng của nó, bạn phải sử dụng tùy chọn CASCADE:
DROP SCHEMA schema_minhhoangblog CASCADE;
Xóa thành công:
Kiểm tra lại thông tin các đối tượng như table, view thì đã không tìm thấy trong schema schema_minhhoangblog nữa: