Bài viết này chúng ta sẽ cùng tìm hiểu schema (lược đồ) PostgreSQL là gì và các vấn đề liên quan đến PostgreSQL schema.
1. Schema trong PostgreSQL là gì?
Trong PostgreSQL, schema là một namespace chứa các đối tượng cơ sở dữ liệu như tables, views, indexes, data types, functions, và operators.
Để truy cập một đối tượng của schema, bạn đặt tên của nó với tên schema làm tiền tố:
schema_name.object_name
Hoặc bạn có thể đặt đường dẫn tìm kiếm (search path) bao gồm schema.
Một cơ sở dữ liệu có thể chứa một hoặc nhiều schema, trong khi mỗi schema chỉ thuộc về một cơ sở dữ liệu. Hai schema có thể có các đối tượng khác nhau có cùng tên.
Ví dụ: bạn có lược đồ sales
có bảng staff
và lược đồ public
cũng có bảng staff
. Khi muốn access bảng staff
thì sẽ ghi như sau:
sales.staff
hoặc
public.staff
2. Tại sao cần sử dụng schema?
Có một số kịch bản mà bạn muốn sử dụng schema (lược đồ):
- Các schema cho phép bạn sắp xếp, nhóm các đối tượng cơ sở dữ liệu, ví dụ: các bảng thành các nhóm logic để làm cho chúng dễ quản lý hơn.
- Các schema cho phép nhiều người dùng sử dụng một cơ sở dữ liệu mà không can thiệp lẫn nhau.
3. public schema là gì?
PostgreSQL tạo một lược đồ có tên public
cho mọi cơ sở dữ liệu mới.
Bất cứ đối tượng nào bạn tạo mà không chỉ định tên lược đồ, PostgreSQL sẽ tự động đặt nó vào lược đồ public này. Do đó, các cách ghi sau là tương đương:
CREATE TABLE table_name(...);
hoặc
CREATE TABLE public.table_name(...);
4. PostgreSQL schema và các đặc quyền
Người dùng (users) chỉ có thể truy cập các đối tượng trong lược đồ mà họ sở hữu. Điều đó có nghĩa là họ không thể truy cập bất kỳ đối tượng nào trong các lược đồ không thuộc về họ.
Để cho phép người dùng truy cập các đối tượng trong lược đồ mà họ không sở hữu, bạn phải cấp đặc quyền USAGE (sử dụng) cho người dùng đó trên lược đồ như sau:
GRANT USAGE ON SCHEMA schema_name TO user_name;
Để cho phép người dùng tạo các đối tượng trong lược đồ mà họ không sở hữu, bạn cần cấp cho họ đặc quyền CREATE trên lược đồ.
GRANT CREATE ON SCHEMA schema_name TO user_name;
※Lưu ý: theo mặc định, mọi người dùng đều có CREATE và USAGE (sử dụng) trên lược đồ public
.
5. Các thao tác với PostgreSQL schema
- Để tạo một lược đồ mới, bạn sử dụng câu lệnh CREATE SCHEMA.
- Để đổi tên lược đồ hoặc thay đổi chủ sở hữu của nó, bạn sử dụng câu lệnh ALTER SCHEMA.
- Để xóa một lược đồ, bạn sử dụng câu lệnh DROP SCHEMA.