Hệ quản trị cơ sở dữ liệu quan hệ là một trong những thành phần chính quan trọng nhất của nhiều trang web. Chúng cung cấp nơi để lưu trữ, sắp xếp và truy cập thông tin một cách có cấu trúc.
PostgreSQL, hoặc Postgres, là một hệ quản trị cơ sở dữ liệu quan hệ cung cấp việc triển khai ngôn ngữ truy vấn SQL. Nó tuân thủ các tiêu chuẩn và có nhiều tính năng nâng cao như giao dịch đáng tin cậy và đồng thời mà không cần khóa đọc.
Hướng dẫn này trình bày cách cài đặt Postgres trên máy chủ Ubuntu 20.04. Nó cũng cung cấp một số hướng dẫn để quản trị cơ sở dữ liệu chung.
Để làm theo hướng dẫn này, bạn sẽ cần:
sudo
và đã được thiết lập tường lửa cơ bản.Các kho lưu trữ mặc định của Ubuntu chứa các gói Postgres, vì vậy bạn có thể cài đặt các gói này bằng cách sử dụng hệ thống apt
.
- sudo apt update
Sau đó, cài đặt Postgres cùng với -contrib
bổ sung một số tiện ích và chức năng bổ sung:
- sudo apt install postgresql postgresql-contrib
Đảm bảo rằng máy chủ đang chạy bằng lệnh bắt đầu với systemctl
:
- sudo systemctl start postgresql.service
Bây giờ phần mềm đã được cài đặt và đang chạy. Chúng ta có thể xem qua cách thức hoạt động và sự khác nhau của nó với các hệ quản trị cơ sở dữ liệu quan hệ khác mà bạn có thể đã sử dụng.
Theo 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. Theo một số cách, chúng tương tự như các tài khoản Unix-style thông thường, nhưng Postgres không phân biệt giữa người dùng và nhóm và thay vào đó thích thuật ngữ linh hoạt hơn “roles”.
Sau khi cài đặt, Postgres được thiết lập để sử dụng xác thực ngang hàng. Điều này có nghĩa là nó 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ò đó.
Quy trình cài đặt đã tạo một tài khoản người dùng được gọi là postgres được liên kết với vai trò Postgres mặc định. Để sử dụng Postgres, bạn có thể đăng nhập vào tài khoản đó.
Có một số cách để sử dụng tài khoản này để truy cập Postgres.
Chuyển sang tài khoản postgres trên máy chủ của bạn bằng cách nhập:
- sudo -i -u postgres
Bây giờ bạn có thể truy cập vào lời nhắc PostgreSQL ngay lập tức bằng cách nhập:
- psql
Từ đó bạn có thể tự do tương tác với hệ quản trị cơ sở dữ liệu khi cần thiết.
Thoát khỏi lời nhắc PostgreSQL bằng cách nhập:
- \q
Thao tác này sẽ đưa bạn trở lại dấu nhắc lệnh của postgres
Linux.
Bạn cũng có thể chạy lệnh bạn muốn với tài khoản postgres trực tiếp với sudo
.
Ví dụ: trong ví dụ trước, bạn được hướng dẫn để truy cập lời nhắc Postgres bằng cách chuyển sang người dùng postgres trước tiên và sau đó chạy psql
để mở lời nhắc Postgres. Bạn có thể thực hiện điều này trong một bước bằng cách chạy lệnh psql
duy nhất với tư cách là người dùng postgres với sudo
, như sau:
- sudo -u postgres psql
Điều này sẽ giúp bạn đăng nhập trực tiếp vào Postgres mà không có trình bash
trung gian ở giữa.
Một lần nữa, bạn có thể thoát phiên Postgres tương tác bằng cách nhập:
- \q
Nhiều trường hợp sử dụng yêu cầu nhiều hơn một Postgres role. Đọc tiếp để tìm hiểu cách định cấu hình chúng.
Hiện tại, bạn chỉ có vai trò postgres được định cấu hình trong cơ sở dữ liệu. Bạn có thể tạo các vai trò mới từ dòng lệnh bằng lệnh createrole. Cờ --interactive sẽ nhắc bạn tên của vai trò mới và cũng hỏi liệu nó có nên có quyền cấp trên 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 đó, nếu bạn muốn sử dụng sudo
cho mỗi lệnh mà không cần chuyển từ tài khoản thông thường của mình, hãy nhập:
- sudo -u postgres createuser --interactive
Tập lệnh sẽ nhắc bạn với một số lựa chọn và dựa trên phản hồi của bạn, thực hiện các lệnh Postgres chính xác để tạo người dùng theo thông số kỹ thuật của bạn.
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
Bạn có thể kiểm soát nhiều hơn bằng cách chuyển một số cờ bổ sung. Kiểm tra các tùy chọn bằng cách xem trang man
:
- man createuser
Cài đặt Postgres của bạn hiện đã có người dùng mới, nhưng bạn chưa thêm bất kỳ cơ sở dữ liệu nào. Phần tiếp theo mô tả quá trình này.
Một giả định khác mà hệ thống xác thực Postgres đưa ra theo mặc định là đối với bất kỳ vai trò nào được sử dụng để đăng nhập, vai trò đó sẽ có một cơ sở dữ liệu có cùng tên mà nó có thể truy cập.
Điều này có nghĩa là nếu người dùng bạn đã tạo trong phần cuối cùng được gọi là sammy, thì vai trò đó sẽ cố gắng kết nối với cơ sở dữ liệu cũng được gọi là “sammy” theo mặc định. Bạn có thể tạo cơ sở dữ liệu thích hợp bằng lệnh createb
.
Nếu bạn đăng nhập bằng tài khoản postgres, bạn sẽ gõ một cái gì đó như:
- createdb sammy
Thay vào đó, nếu bạn muốn sử dụng sudo
cho mỗi lệnh mà không cần chuyển từ tài khoản thông thường của mình, bạn sẽ nhập:
- sudo -u postgres createdb sammy
Tính linh hoạt này cung cấp nhiều đường dẫn để tạo cơ sở dữ liệu khi cần thiết.
Để đăng nhập bằng 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à vai trò Postgres của bạn.
Nếu bạn không có sẵn người dùng Linux phù hợp, bạn có thể tạo một người dùng bằng lệnh adduser
. Bạn sẽ phải thực hiện việc này từ tài khoản không phải root của mình với các đặc quyền sudo
(nghĩa là không đăng nhập với tư cách người dùng postgres):
- sudo adduser sammy
Khi tài khoản mới này khả dụng, bạn có thể chuyển đổi và kết nối với cơ sở dữ liệu bằng cách nhập:
- sudo -i -u sammy
- psql
Hoặc, bạn có thể nhập dòng sau:
- sudo -u sammy psql
Lệnh này sẽ tự động đăng nhập cho bạn, giả sử rằng tất cả các thành phần đã được định cấu hình đúng cách.
Nếu bạn muốn người dùng của mình kết nối với một cơ sở dữ liệu khác, bạn có thể làm như vậy bằng cách chỉ định cơ sở dữ liệu như sau:
- psql -d postgres
Sau khi đăng nhập, bạn có thể kiểm tra thông tin kết nối hiện tại của mình bằng cách nhập:
- \conninfo
OutputYou are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
Điều này sẽ hữu ích nếu 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ây giờ 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 này đặt tên cho bảng, sau đó xác định các cột cũng như loại cột và độ dài tối đa của dữ liệu trường. Bạn cũng có thể tùy chọn thêm các ràng buộc bảng cho mỗi cột.
Với mục đích trình diễn, hãy tạo bảng 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
);
Lệnh này sẽ tạo một bảng kiểm kê thiết bị sân chơi. Cột đầu tiên trong bảng sẽ chứa số ID thiết bị của loại serial
, là một số nguyên tự động tăng dần. Cột này cũng có ràng buộc của PRIMARY KEY
có nghĩa là các giá trị bên trong nó phải là duy nhất và không được rỗng.
Hai dòng tiếp theo tạo ra các cột cho loại type
và color
tương ứng, không có cột nào được để trống. Dòng sau những dòng này tạo cột location
cũng như một ràng buộc yêu cầu giá trị phải là một trong tám giá trị có thể. Dòng cuối cùng tạo một cột ngày ghi date
bạn lắp đặt thiết bị.
Đối với hai trong số các cột (Equi_id
và install_date
), lệnh không chỉ định độ dài trường. Lý do cho điều này là một số loại dữ liệu không yêu cầu độ dài đã đặt vì độ dài hoặc định dạng được ngụ ý.
Bạn có thể xem bảng mới của mình bằng cách nhập:
- \d
Output List of relations
Schema | Name | Type | Owner
--------+-------------------------+----------+-------
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(2 rows)
Bảng sân chơi của bạn ở đây, nhưng cũng có một thứ được gọi là playground_equip_id_seq
, cái mà thuộc loại sequence
. Đây là đại diện của loại nối tiếp mà bạn đã cung cấp cho cột trang bị của mình. Điều này giúp 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 bảng mà không có trình tự, bạn có thể nhập:
- \dt
Output List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
Với một bảng đã sẵn sàng, hãy sử dụng nó để thực hành quản lý dữ liệu.
Bây giờ bạn đã có một bảng, bạn có thể chèn một số dữ liệu vào đó. Ví dụ: thêm một trang trình bày và một xích đu bằng cách gọi bảng bạn muốn thêm vào, đặt tên cho các cột và sau đó cung cấp dữ liệu cho mỗi 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 cần lưu ý khi nhập dữ liệu để tránh một số trường hợp treo máy thường gặp. Một trong số đó là không đặt tên cột trong dấu ngoặc kép, nhưng giá trị cột mà bạn nhập cần có dấu ngoặc kép.
Một điều khác cần lưu ý là bạn không nhập giá trị cho cột equip_id
. Điều này là do điều 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.
Truy xuất 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)
Tại đây, bạn có thể thấy rằng trang bị của bạn đã thành công và tất cả các dữ liệu khác của bạn đã được sắp xếp chính xác.
Nếu trang chiếu trên sân chơi bị hỏng và bạn phải xóa nó, bạn cũng có thể xóa hàng khỏi bảng của mình bằng cách nhập:
- DELETE FROM playground WHERE type = 'slide';
Truy vấn lại bảng:
- SELECT * FROM playground;
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
Lưu ý rằng hàng slide
không còn là một phần của bảng.
Sau khi tạo bảng, bạn có thể sửa đổi nó bằng cách thêm hoặc bớt các cột. Thêm một cột để hiển thị lần bảo dưỡng cuối cùng cho từng phần thiết bị bằng cách nhập:
- ALTER TABLE playground ADD last_maint date;
Nếu bạn xem lại thông tin bảng của mình, 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:
- 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 nhóm làm việc của mình 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 nhập:
- ALTER TABLE playground DROP last_maint;
Thao tác này sẽ xóa cột last_maint
và bất kỳ giá trị nào được tìm thấy bên trong nó, nhưng giữ nguyên tất cả các dữ liệu khác.
Cho đến nay, bạn đã học cách thêm bản ghi vào bảng và cách xóa chúng, nhưng hướng dẫn này chưa trình bày cách sửa đổi các mục nhập hiện có.
Bạn có thể cập nhật các giá trị của mục nhập hiện có bằng cách truy vấn bản ghi bạn muốn và đặt cột thành giá trị bạn muốn sử dụng. Bạn có thể truy vấn bản ghi swing (điều này sẽ khớp với mọi cú swing
trong bảng của bạn) và thay đổi màu của nó thành red
. Điều này có thể hữu ích nếu bạn đã sơn cho xích đu một công việc:
- UPDATE playground SET color = 'red' WHERE type = 'swing';
Bạn có thể xác minh rằng thao tác đã thành công 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, trang chiếu bây giờ được đăng ký là có màu đỏ.
Bây giờ bạn đã được thiết lập với PostgreSQL trên máy chủ Ubuntu 20.04 của mình.