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.

Đọc thêm  PGA trong Oracle là gì

 

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à: pgagentpublic.

 

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 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 2: ADMIN 1 + DATA GUARD

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é.

5 1 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x