Mục lục
1. Giới thiệu Schema
Trong PostgreSQL, schema là một tập hợp các đối tượng (bảng, view, index, function,…). Schema là một phần của database.
Trong bài viết này, tôi sẽ hướng dẫn các bạn các thao tác quản trị thường gặp với Schema.
2. Xem thông tin về schema
Như tôi đã nói ở trên, schema là một phần của database, do đó, bạn cần phải kết nối vào database trước rồi mới xem các schema thuộc database đó. Ở đây tôi sử dụng psql để thực hành nhé.
psql psql (13.2) Type "help" for help. postgres=# \c test You are now connected to database "test" as user "postgres". test=# \dn+
Ở câu lệnh trên, tôi đã dùng lệnh \c test để kết nối vào database test. Tiếp theo tôi gõ lệnh \dn+ để liệt kê tất cả thông tin schema của database test đang có. Kết quả sẽ như sau:
Như các bạn thấy, hiện tôi đang có 2 schema là: pgagent và public.
3. Tại sao lại cần đến Schema?
Để giúp bạn tổ chức các nhóm đối tượng liên quan với nhau trong cùng 1 database. VD: các bảng thuộc nghiệp vụ kế toán, nhân sự sẽ có schema riêng.
Schema cũng như 1 database tự trị thu nhỏ được tạo ra dành riêng cho 1 user hay nhóm con user nào đó, mà không ảnh hưởng đến những user còn lại trong database. Bạn hoàn toàn có thể đặt tên bảng giống nhau, chỉ cần khác schema là được.
Để truy cập 1 đối tượng trong schema, ta dùng cấu trúc <tên Schema>.<tên đối tượng>
Giả sử tôi muốn xem dữ liệu của bảng customer thuộc schema duy, tôi gõ lệnh như sau:
select * from duy.customer;
4. Public Schema là gì?
PostgreSQL mặc định sẽ tạo ra 1 schema mỗi khi 1 database được tạo ra. Đó là schema public. Mỗi khi bạn tạo ra 1 đối tượng gì mà không chỉ ra tên schema cụ thể, nó sẽ được đặt vào trong schema public.
VD: 2 câu lệnh sau là tương đương về kết quả:
create table customer ( id int4, name text);
create table public.customer ( id int4, name text);
Bạn hoàn toàn có thể thay đổi hành vi này để mỗi khi tạo 1 đối tượng mới mà không chỉ ra schema, nó sẽ tự đặt đối tượng vào schema mà bạn muốn. Sử dụng search_path để làm điều đó.
5. Cách sử dụng search_path
Search_path là 1 tham số quy định danh sách schema mà PostgreSQL sẽ sử dụng để tìm hay tạo 1 đối tượng nào đó. Bạn có thể xem giá trị search_path hiện tại bằng câu lệnh sau:
show search_path ; search_path ----------------- "$user", public (1 row)
Như các bạn thấy, search_path là 1 danh sách bao gồm: $user tức là tên user đang kết nối vào (VD là user duy đang kết nối vào chẳng hạn), tiếp theo là public.
Điều đó có nghĩa là, nếu bạn tạo 1 đối tượng mà không chỉ ra schema, PostgreSQL sẽ cố gắng tìm schema có tên trùng với user mà bạn dùng để đăng nhập trước để đặt đối tượng vào đó, nếu schema đó không tồn tại, nó sẽ tạo đối tượng ở schema tiếp theo trong search_path, đó là public.
Giờ thì bạn đã hiểu, tại sao ở ví dụ trước, khi tôi tạo 1 bảng mà không chỉ ra schema, nó sẽ được đặt vào trong public rồi chứ. Bây giờ bạn thử tạo 1 schema có tên trùng với tên user bạn sử dụng để đăng nhập và tạo lại bảng, sau đó bạn kiểm tra lại xem bảng đó đã được đặt vào schema nào.
VD ở đây tôi đang đăng nhập bằng user postgres và tạo ra 1 schema cũng tên là postgres
create schema postgres; CREATE SCHEMA test=# test=# test=# \dn+ List of schemas Name | Owner | Access privileges | Description ----------+-----------+----------------------+------------------------ pgagent | admin | | pgAgent system tables postgres | postgres | | public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres +| | | tms_test=U/postgres | (3 rows) test=# test=# create table test (id int4, name text); CREATE TABLE test=# test=# select * from test; id | name ----+------ (0 rows) test=# select * from postgres.test; id | name ----+------ (0 rows) test=# select * from public.test; ERROR: unrecognized configuration parameter "myapp.myvar"
6. Xóa bỏ Schema
Để xóa bỏ 1 schema và tất cả các đối tượng nằm trong schema, bạn sử dụng lệnh sau:
drop schema <tên schema> cascade;
Tham số cascade sẽ cho phép bạn xóa schema cùng tất cả các thành phần bên trong của nó.
Nguồn: https://dangxuanduy.com/
Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.
KHOÁ DÀNH CHO NGƯỜI MỚI
KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)
CÁC KHOÁ NÂNG CAO:
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD
CÁC KHOÁ COMBO:
COMBO 1: ADMIN 1 + MULTITENANT 12c
COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD
LỊCH HỌC:
Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE
ĐĂNG KÝ:
https://forms.gle/MtCAoRQFenP886y79
Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.