Bài viết này sẽ mô tả cách sử dụng lệnh ALTER SCHEMA để thay đổi schema đã được tạo.
1. Thay đổi tên schema
Đầu tiên là đổi tên schema bằng lệnh ALTER SCHEMA. Sử dụng định dạng sau:
ALTER SCHEMA name RENAME TO new_name;
Đổi tên schema hiện tại (name) thành tên của schema mới (new_name).
Để đổi tên schema, vai trò thực thi lệnh phải là superuser hoặc có đặc quyền CREATE trên cơ sở dữ liệu nơi schema được tạo và schema được tạo.
Trước khi thực hiện đổi tên schema, chúng ta sẽ kết nối đến database mydb để kiểm tra xem mydb đang có những schema nào.
Thay đổi tên schema myschema2 thành tên mới là schema_minhhoangblog
ALTER SCHEMA myschema2 RENAME TO schema_minhhoangblog;
2. Thay đổi chủ sở hữu (owner) của schema
Sử dụng định dạng sau của lệnh ALTER SCHEMA để thay đổi chủ sở hữu của schema:
ALTER SCHEMA name OWNER TO { new_owner | CURRENT_USER | SESSION_USER };
Để thay đổi chủ sở hữu của schema, vai trò thực thi lệnh phải là superuser hoặc chủ sở hữu schema và là thành viên của chủ sở hữu mới, trực tiếp hoặc gián tiếp và có đặc quyền CREATE trên cơ sở dữ liệu nơi tạo schema.
Trước tiên, chúng ta sẽ kiểm tra các schema hiện có của database mydb
Thay đổi owner của schema myschema thành owner mới là minhminh
ALTER SCHEMA myschema OWNER TO minhminh;
※Trường hợp chỉ muốn lấy các schema do người dùng tạo, không bao gồm schema public có sẵn mặc định thì chúng ta sử dụng truy vấn sau:
SELECT
*
FROM
pg_catalog.pg_namespace
WHERE
nspacl is NULL AND
nspname NOT LIKE 'pg_%'
ORDER BY
nspname;
Cách di chuyển (move) table từ schema này qua schema khác
Lệnh \dn xem danh sách các schema hiện có trong database sampledata:
Lệnh \dt xem hiện tại các table của database sampledata đang thuộc schema nào:
Chúng ta cả 2 table tblclass và tblstudents đều thuộc schema public.
Bây giờ sẽ dùng lệnh ALTER TABLE để di chuyển table tblclass sang schema myschema:
ALTER TABLE tblclass SET SCHEMA myschema;
và chúng ta đã di chuyển thành công.