Hệ thống quản trị cơ sở dữ liệu quan hệ là một thành phần chính của trang web và ứng dụng. Postgres hay còn gọi là Postgres cung cấp một cách có cấu trúc để lưu trữ, tổ chức và truy cập thông tin bằng ngôn ngữ truy vấn SQL. PostgreSQL có thể đảm bảo tính tin cậy cho các transaction và quản lý đồng thời mà không cần khóa việc đọc dữ liệu. Trong bài viết này, Vietnix sẽ hướng dẫn bạn cách cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04 và một số hướng dẫn quản trị cơ sở dữ liệu.
Điều kiện để cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04
Để thực hiện hướng dẫn này, bạn cần có một máy chủ Ubuntu 20.04 đã cấu hình firewall và tài khoản máy chủ có quyền sudo nhưng không phải là tài khoản root.
Để có một máy chủ linh hoạt, hỗ trợ đa dạng hệ điều hành, toàn quyền quản trị và cài đặt PostgreSQL, bạn có thể tham khảo lựa chọn dịch vụ VPS tại Vietnix.
Vietnix là một trong những nhà cung cấp dịch vụ VPS tốc độ cao uy tín hàng đầu tại Việt Nam. Tại đây, bạn có thể lựa chọn gói dịch vụ VPS có cầu hình phù hợp với nhu cầu và lựa chọn cài đặt các hệ điều hành phổ biến như Ubuntu, CentOS, Debian, Windows Server,… Sở hữu VPS Vietnix, bạn tự do quản trị và cài đặt các phần mềm, ứng dụng trên máy chủ của mình, bao gồm cả PostgreSQL.
Các gói VPS tại Vietnix đều được đánh giá có tốc độ nhanh, độ ổn định và bảo mật cao, được sao lưu dữ liệu định kỳ, đảm bảo an toàn. Ngoài ra, bất cứ khi nào bạn có thắc mắc hay vấn đề cần hỗ trợ, đội ngũ kỹ thuật của Vietnix cũng luôn sẵn sàng hỗ trợ bạn 24/7. Liên hệ ngay với Vietnix để được tư vấn chi tiết.
Bước 1: Cài đặt PostgreSQL
Các kho lưu trữ mặc định của Ubuntu chứa các package Postgres, vì vậy bạn có thể cài đặt các package này bằng hệ thống package apt
.
Đầu tiên, thực hiện cập nhật hệ thống bằng câu lệnh:
sudo apt update
Sau đó, cài đặt package Postgres cùng với một package -contrib
có các tiện ích và chức năng bổ sung:
sudo apt install postgresql postgresql-contrib
Đảm bảo rằng dịch vụ đang chạy bằng lệnh systemctl start
:
sudo systemctl start postgresql.service
Bây giờ PostgreSQL đã được cài đặt và khởi chạy thành công, hãy xem xét cách thức hoạt động và sự khác nhau giữa PostgreSQL với các hệ thống quản lý cơ sở dữ liệu quan hệ khác mà có thể bạn đã từng sử dụng.
Bước 2: Sử dụng phân quyền trong PostgreSQL và cơ sở dữ liệu
Mặc định, Postgres sử dụng một khái niệm gọi là “roles” để xử lý xác thực và ủy quyền. Trong một vài ngữ cảnh, khái niệm này được ví tương tự như hệ thống phân quyền tài khoản trong Unix, nhưng Postgres không phân biệt giữa người dùng và nhóm người dùng, thay vào đó sử dụng “role” để thể hiện một cách linh hoạt hơn.
Khi cài đặt, Postgres được thiết lập sử dụng phương thức xác thực ngang hàng (peer authentication), có nghĩa là có liên kết các vai trò của Postgres với tài khoản hệ thống UNIX/Linux phù hợp. Nếu một vai trò tồn tại trong Postgres, tên người dùng Unix/Linux có cùng tên có thể đăng nhập với vai trò đó.
Trong quá trình cài đặt đã tạo một tài khoản người dùng có tên Postgres được cấp quyền Postgres mặc định. Bạn có thể đăng nhập vào tài khoản đó để sử dụng Postgres.
Có một vài cách để sử dụng tài khoản này để truy cập Postgres.
Chuyển sang tài khoản Postgres
Chuyển sang tài khoản Postgres trên máy chủ của bạn bằng câu lệnh:
sudo -i -u postgres
Bây giờ bạn có thể truy cập giao diện dòng lệnh PostgreSQL một cách nhanh chóng bằng câu lệnh:
psql
Từ đó, bạn có thể tự do tương tác với hệ thống quản lý cơ sở dữ liệu khi cần thiết.
Thoát khỏi giao diện dòng lệnh PostgreSQL bằng cách gõ:
\q
Thao tác này sẽ đưa bạn trở lại giao diện dòng lệnh postgres
Linux.
Truy cập Postgres prompt mà không cần chuyển đổi tài khoản
Bạn có thể chạy lệnh bạn muốn trực tiếp với tài khoản Postgres bằng sudo
.
Ví dụ như bạn được hướng dẫn truy cập Postgres prompt bằng cách chuyển sang người dùng postgres và sau đó chạy psql
để mở Postgres prompt. Bạn có thể làm điều này trong một bước bằng cách chạy lệnh psql
đơn lẻ với tư cách là người dùng Postgres với sudo như sau:
sudo -u postgres psql
Câu lệnh này giúp bạn đăng nhập trực tiếp vào Postgres mà không cần bash
shell trung gian ở giữa.
Tương tự, bạn có thể thoát khỏi phiên làm việc Postgres bằng cách gõ:
\q
Trong các trường hợp thực tế, một tài khoản có thể được phần quyền nhiều vai trò cụ thể. Để biết được làm thế nào để cấu hình như vậy hay theo dõi các bước cấu hình bên dưới.
Bước 3: Tạo một Role mới
Thực tế, bạn chỉ có vai trò postgres được cấu hình trong cơ sở dữ liệu. Bạn có thể tạo role mới từ dòng lệnh bằng lệnh createrole
. Cờ --interactive
sẽ nhắc bạn nhập tên của role mới và cũng hỏi xem vai trò đó có quyền siêu người dùng hay không.
Nếu bạn đã đăng nhập bằng tài khoản postgres, bạn có thể tạo người dùng mới bằng cách nhập:
createuser --interactive
Thay vào đó, bạn có thể thêm sudo
cho câu lệnh mà không phải chuyển đổi từ tài khoản thường sang tài khoản khác có quyền bằng câu lệnh:
sudo -u postgres createuser --interactive
Tập lệnh sẽ hỏi bạn tên role mới và có cấp quyền siêu người dùng không. Dựa vào đó thực hiện các lệnh Postgres chính xác để tạo người dùng theo yêu cầu.
Output
Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
Bạn có thể tạo chi tiết hơn khi thêm một số cờ bổ sung. Kiểm tra danh sách các tùy chọn bằng cách xem hướng dẫn qua câu lệnh:
man createuser
Lúc này, Postgres hiện thêm người dùng mới thành công, nhưng chưa gán quyền thao tác với bất kỳ cơ sở dữ liệu nào. Bước 4 sẽ mô tả quá trình này.
Bước 4: Tạo một cơ sở dữ liệu mới
Một giả định rằng, khi đăng nhập vào hệ thống với vai trò nào thì sẽ có quyền truy cập cơ sở dữ liệu có cùng tên với vai trò đó.
Điều này có nghĩa là nếu người dùng bạn tạo ở bước 3 được gọi là Sammy, vai trò đó sẽ cố gắng kết nối với cơ sở dữ liệu còn được gọi là “Sammy” theo mặc định. Bạn cũng có thể tạo cơ sở dữ liệu thích hợp với lệnh createdb
.
Nếu bạn đã đăng nhập thành công vào Postgres, bạn có thể tạo một cơ sở dữ liệu với lệnh sau:
createdb sammy
Thay vào đó, bạn có thể sử dụng sudo
cho lệnh mà không cần chuyển đổi qua lại từ tài khoản thông thường của mình:
sudo -u postgres createdb sammy
Giúp đảm bảo sự linh hoạt để tạo cơ sở dữ liệu khi cần thiết.
Bước 5: Mở Postgres Prompt với Role mới
Để đăng nhập bằng cách xác thực ngang hàng, bạn sẽ cần một người dùng Linux có cùng tên với cơ sở dữ liệu và Role Postgres của bạn.
Nếu bạn không có sẵn Linux user phù hợp, bạn có thể tạo một user mới bằng lệnh adduser
. Bạn sẽ phải thực hiện tạo mới user bằng tài khoản có quyền sudo
mà không phải root của mình (nghĩa là không đăng nhập với tư cách người dùng postgres):
sudo adduser sammy
Lúc này, tài khoản mới này đã được tạo, bạn có thể chuyển đổi và kết nối với cơ sở dữ liệu bằng cách chạy các câu lệnh sau:
sudo -i -u sammy
psql
Hoặc bạn có thể viết cùng trên một dòng:
sudo -u sammy psql
Giả sử rằng tất cả các thành phần đã được cấu hình đúng thì lệnh này sẽ giúp bạn tự động đăng nhập vào Postgres Prompt
Nếu bạn muốn tài khoản của mình kết nối với cơ sở dữ liệu khác, bạn có thể làm bằng cách chỉ định cơ sở dữ liệu mong muốn như sau:
psql -d postgres
Khi đó đã đăng nhập thành công, bạn có thể kiểm tra thông tin kết nối hiện tại bằng cách nhập:
\conninfo
Bạn có thể nhận được kết quả như sau:
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
Điều này hữu ích kho bạn đang kết nối với cơ sở dữ liệu không mặc định hoặc với người dùng không mặc định.
Bước 6: Tạo và xóa bảng
Sau khi bạn đã biết cách kết nối với hệ thống cơ sở dữ liệu PostgreSQL, bạn có thể tìm hiểu một số tác vụ quản lý Postgres cơ bản.
Cú pháp cơ bản để tạo bảng như sau:
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);
Như bạn có thể thấy, các lệnh trên thực hiện nhiệm vụ đặt tên cho bảng, sau đó xác định các tên cột, loại dữ liệu và độ dài tối đa của dữ liệu. Bạn cũng có thể tùy chọn thêm các ràng buộc bảng (table constraints) cho mỗi cột.
Ví dụ, bạn có thể tạo một bảng với các giá trị như sau:
CREATE TABLE playground (
equip_id serial PRIMARY KEY,
type varchar (50) NOT NULL,
color varchar (25) NOT NULL,
location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
install_date date
);
Dòng đầu tiên tạo ra một bảng tên là playground.
Cột equip_id là khóa chính, kiểu dữ liệu serial
là một số nguyên tự động tăng. Cột này cũng có ràng buộc của khóa chính PRIMARY KEY
có nghĩa là các giá trị của cột phải là duy nhất và không được null.
Hai dòng tiếp theo tạo ra các cột type
và color
, cả hai đều không được null và không được bỏ trống. Dòng tiếp theo tạo một cột location
với ràng buộc chỉ có thể là một trong tám giá trị đó. Dòng cuối cùng tạo ra một cột ngày ghi lại thời gian mà bạn đã cài đặt thiết bị đó.
Đối với hai cột equip_id
và install_date
không chỉ định độ lớn dữ liệu vì kiểu dữ liệu đó thuộc loại dữ liệu không yêu xác định cầu độ lớn hoặc ngầm định rằng kiểu dữ liệu đã bao hàm độ lớn.
Để xem bảng mới được tạo bằng câu lệnh:
\d
Output
List of relations
Schema | Name | Type | Owner
--------+-------------------------+----------+-------
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(2 rows)
Bảng playground được liệt kê, bên cạnh đó có một dòng khác là playground_equip_id_seq
thuộc loại trình tự (sequence
). Đây là phần trình bày của loại serial
mà bạn đã cung cấp cho cột equip_id
của mình. Điều này theo dõi số tiếp theo trong chuỗi và được tạo tự động cho các cột thuộc loại này.
Nếu bạn chỉ muốn xem danh sách bảng, bạn có thể xem bằng lệnh:
\dt
Output
List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
Phần tiếp theo, sử dụng bảng vừa được tạo để thực hành quản lý dữ liệu.
Bước 7: Thêm, truy vấn và xóa dữ liệu trong bảng
Bây giờ bạn có thể chèn một vài dữ liệu vào bảng.
Ví dụ: Thêm slide và swing bằng cách gọi bảng bạn muốn thêm vào dữ liệu, đặt tên cho các cột và sau đó cung cấp dữ liệu cho từng cột như sau:
INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');
Bạn sẽ phải lưu ý một vài điều khi nhập dữ liệu để tránh các lỗi thông thường.
Đầu tiên, không để tên các cột trong dấu ngoặc đơn, nhưng ngược lại các giá trị cột mà bạn nhập cần đặt trong dấu ngoặc đơn.
Một điều khác cần lưu ý là bạn không nhập cần giá trị cho cột equip_id
do giá trị cột này được tạo tự động bất cứ khi nào bạn thêm một hàng mới vào bảng.
Lấy thông tin bạn đã thêm bằng cách nhập:
SELECT * FROM playground;
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
1 | slide | blue | south | 2017-04-28
2 | swing | yellow | northwest | 2018-08-16
(2 rows)
Bạn có thể thấy rằng dữ liệu của bạn đã được thêm thành công và tất cả các dữ liệu khác của bạn đã được tổ chức một cách chính xác.
Nếu slide không còn tồn tại nữa và bạn muốn xóa khỏi cơ sở dữ liệu của mình bằng cách gõ câu lệnh sau:
DELETE FROM playground WHERE type = 'slide';
Bây giờ, xem lại các dữ liệu trong bảng:
SELECT * FROM playground;
Output
equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
Có thể thấy rằng slide
đã được xóa khỏi bảng thành công.
Bước 8: Thêm và xóa cột khỏi bảng
Sau khi tạo một bảng, bạn có thể sửa đổi bằng cách thêm hoặc bớt các cột.
Thực hiện thêm một cột last_maint để hiển thị lần bảo trì cuối cùng cho từng thiết bị bằng cách nhập:
ALTER TABLE playground ADD last_maint date;
Xem lại thông tin bảng của bạn, bạn sẽ thấy cột mới đã được thêm vào nhưng không có dữ liệu nào được nhập vào:
SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)
Nếu bạn thấy rằng đội ngũ công việc của bạn sử dụng một công cụ riêng biệt để theo dõi lịch sử bảo trì, bạn có thể xóa cột bằng cách gõ:
ALTER TABLE playground DROP last_maint;
Câu lệnh này sẽ xóa cột last_maint và bất kỳ giá trị nào được tìm thấy trong cột đó và sẽ không ảnh hưởng tới các cột dữ liệu khác.
Bước 9: Cập nhật dữ liệu trong bảng
Đến đây, bạn đã biết được cách thêm dữ liệu vào bảng và cách xóa chúng nhưng chưa bao gồm cách sửa đổi các dữ liệu hiện có.
Bạn có thể cập nhật các giá trị của một bản ghi dữ liệu hiện có bằng cách truy vấn cho bản ghi bạn muốn và đặt giá trị cột thành giá trị mới mà bạn mong muốn.
Bạn có thể truy vấn cho bản ghi có loại là swing
(điều này sẽ khớp với mọi type
là swing
có trong bảng) và thay đổi thành màu đỏ bằng câu lệnh.
UPDATE playground SET color = 'red' WHERE type = 'swing';
Bạn có thể kiểm tra thao tác đã thành công hay chưa bằng cách truy vấn lại dữ liệu:
SELECT * FROM playground;
Output
equip_id | type | color | location | install_date
----------+-------+-------+-----------+--------------
2 | swing | red | northwest | 2018-08-16
(1 row)
Như bạn có thể thấy thiết bị có loại là swing đã được thay đổi màu sắc thành màu đỏ.
Ngoài ra, đổi vị trí thư mục lưu trữ dữ liệu của PostgreSQL trên Ubuntu 20.04 cũng là một bước quan trọng để tối ưu hóa hiệu suất của cơ sở dữ liệu, vì việc tối ưu hóa vị trí lưu trữ dữ liệu của PostgreSQL có thể giúp nâng cao hiệu suất của hệ thống cơ sở dữ liệu của bạn trên Ubuntu 20.04.
Lời kết
Với bài hướng dẫn này, bạn có thể thiết lập được cơ sở dữ liệu với PostgreSQL trên Ubuntu server 20.04 của bạn. Nếu bạn thấy bài viết hướng dẫn cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04 hữu ích thì hãy bình luận và chia sẻ bài viết đến với nhiều người cùng đọc nhé.