Trang chủ / Chuyên đề / Cài đặt và sử dụng PostgreSQL trên Ubuntu 18.04
Thứ sáu, 04/05/2018 | 00:00 GMT+7

Cài đặt và sử dụng PostgreSQL trên Ubuntu 18.04

Hệ quản trị database quan hệ là thành phần chính của nhiều trang web và ứng dụng. Chúng cung cấp một cách có cấu trúc để lưu trữ, sắp xếp và truy cập thông tin. PostgreSQL , hoặc Postgres, là một hệ thống quản lý database quan hệ cung cấp việc triển khai ngôn ngữ truy vấn SQL. Nó là một lựa chọn phổ biến cho nhiều dự án lớn và nhỏ và có ưu điểm là tuân theo các tiêu chuẩn và có nhiều tính năng nâng cao.

Hướng dẫn này sẽ cài đặt Postgres trên version VPS Ubuntu 18.04 và cung cấp hướng dẫn quản trị database cơ bản.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần một server Ubuntu 18.04 đã được cấu hình theo hướng dẫn Thiết lập Server Ban đầu cho Ubuntu 18.04 . Sau đó, server phải có user không phải root có quyền sudo và firewall cơ bản.

Bước 1 - Cài đặt PostgreSQL

Repository 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 đóng gói apt .

Vì đây là lần đầu tiên bạn sử dụng apt trong phiên này, hãy cập nhật server. Sau đó, cài đặt gói Postgres cùng với gói -contrib bổ sung một số tiện ích và chức năng :

  • sudo apt update
  • sudo apt install postgresql postgresql-contrib

Bây giờ phần mềm đã được cài đặt, ta có thể xem qua cách nó hoạt động và nó khác gì với các hệ thống quản lý database tương tự mà bạn đã sử dụng.

Bước 2 - Sử dụng Database và Role PostgreSQL

Theo mặc định, Postgres sử dụng một khái niệm gọi là "roles" để xử lý trong xác thực và ủy quyền. Theo một số cách, chúng tương tự như các account kiểu Unix thông thường, nhưng Postgres không phân biệt giữa user và group và thay vào đó thích thuật ngữ linh hoạt hơn “role”.

Sau khi cài đặt, Postgres được thiết lập để xác thực sử dụng ident, nghĩa là nó liên kết role Postgres với một account phù hợp với hệ thống Unix / Linux. Nếu một role tồn tại trong Postgres, tên user Unix / Linux có cùng tên có thể đăng nhập với role đó.

Quy trình cài đặt đã tạo một account user được gọi là postgres được liên kết với role Postgres mặc định. Để sử dụng Postgres, bạn có thể đăng nhập vào account đó.

Có một số cách để sử dụng account này để truy cập Postgres.

Chuyển sang Account postgres

Chuyển sang account postgres bằng lệnh:

  • sudo -i -u postgres

Như vậy, bạn có thể truy cập dấu nhắc Postgres ngay bằng lệnh:

  • psql

Thao tác này sẽ đăng nhập vào dấu nhắc PostgreSQL và từ đây bạn có thể tự do tương tác với database.

Thoát khỏi dấu nhắc PostgreSQL bằng lệnh:

  • \q

Thao tác này sẽ đưa bạn trở lại dấu nhắc lệnh Linux.

Truy cập Dấu nhắc của Postgres mà không cần chuyển đổi account

Bạn cũng có thể chạy lệnh với account postgres trực tiếp với sudo .

Ví dụ: trong ví dụ trước, bạn đã thấy để truy cập dấu nhắc Postgres bằng cách chuyển sang user postgres trước tiên và sau đó chạy psql để mở dấu 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 quyền là user 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ó shell bash trung gian.

Bạn có thể thoát phiên Postgres tương tác bằng lệnh:

  • \q

Nhiều trường hợp sử dụng yêu cầu nhiều hơn một role Postgres. Đọc tiếp để tìm hiểu cách cấu hình chúng.

Bước 3 - Tạo một role mới

Hiện tại, bạn chỉ có role postgres được cấu hình trong database. 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 tên của role mới và cũng hỏi xem nó có nên có quyền cấp trên user hay không.

Nếu bạn đã đăng nhập bằng account postgres , bạn có thể tạo user mới bằng lệnh:

  • createuser --interactive

Thay vào đó, nếu bạn muốn sử dụng sudo cho từng lệnh mà không cần chuyển từ account thông thường của bạn, 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 trả lời của bạn, thực hiện các lệnh Postgres chính xác để tạo user theo thông số kỹ thuật của bạn.

Output
Enter 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

Bản cài đặt Postgres của bạn hiện đã có user mới, nhưng chưa thêm database nào. Phần tiếp theo mô tả quá trình này.

Bước 4 - Tạo database mới

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ỳ role nào được sử dụng để đăng nhập, role đó sẽ có một database có cùng tên mà nó có thể truy cập.

Điều này nghĩa là, nếu user bạn đã tạo trong phần cuối cùng được gọi là sammy , thì role đó sẽ cố gắng kết nối với database cũng được gọi là “sammy” theo mặc định. Bạn có thể tạo database thích hợp bằng lệnh createdb .

Nếu bạn đăng nhập bằng account postgres , bạn sẽ nhập thông tin 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ừ account thông thường của bạn, bạn sẽ nhập:

  • sudo -u postgres createdb sammy

Tính linh hoạt này cho phép nhiều cách để tạo database khi cần thiết.

Bước 5 - Mở Dấu nhắc của Postgres với role mới

Để đăng nhập bằng xác thực dựa trên ident , bạn cần user linux với tên giống như role Postgres của bạn và database. 

Nếu bạn không có sẵn user Linux phù hợp, bạn có thể tạo một user bằng lệnh adduser . Bạn sẽ phải thực hiện việc này từ account không phải root của mình với các quyền sudo (nghĩa là không đăng nhập với quyền user postgres ):

  • sudo adduser sammy

Khi account mới này khả dụng, bạn có thể chuyển đổi và kết nối với database bằng lệnh:

  • sudo -i -u sammy
  • psql

Hoặc, bạn có thể thực hiện với một lệnh:

  • 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 cấu hình đúng.

Nếu bạn muốn user kết nối với một database khác, bạn có thể thực hiện bằng cách chỉ định database 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 bạn bằng lệnh:

  • \conninfo
Output
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 nếu bạn đang kết nối với database không mặc định hoặc với user không mặc định.

Bước 6 - Tạo và xóa bảng

Đến đây bạn đã biết cách kết nối với hệ thống database PostgreSQL, bạn có thể tìm hiểu một số tác vụ quản lý Postgres cơ bản.

Đầu tiên, tạo một bảng để lưu trữ một số dữ liệu. Ví dụ, một bảng mô tả một số thiết bị playground (sân-chơi).

Cú pháp cơ bản cho lệnh này 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 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 trường dữ liệu. 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.

Bạn có thể tìm hiểu thêm về cách tạo và quản lý bảng trong Postgres tại đây.

Với mục đích demo, hãy tạo một bảng đơn giản 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
);

Các lệnh này sẽ tạo một bảng kiểm kê thiết bị playground (sân-chơi). Điều này bắt đầu với một ID thiết bị, thuộc loại serial . Kiểu dữ liệu này là một số nguyên tự động tăng dần. Bạn cũng đã cung cấp cho cột này ràng buộc của primary key nghĩa là các giá trị phải là duy nhất và không được rỗng.

Đối với hai trong số các cột ( equip_idinstall_date ), các lệnh không chỉ định độ dài trường. Điều này là do một số loại cột không yêu cầu độ dài đã đặt vì độ dài được xác định bởi kiểu.

Hai lệnh tiếp theo tạo các cột cho type kiểu thiết bị và color tương ứng, mỗi cột không được để trống. Lệnh sau những lệnh này tạo một cột location và tạo một ràng buộc yêu cầu giá trị phải là một trong tám giá trị có thể. Lệnh cuối cùng tạo một cột ngày ghi lại ngày bạn đã lắp đặt thiết bị.

Bạn có thể xem bảng mới của bạn bằng 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 (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 thuộc loại sequence . Đây là một thể hiện của kiểu serial mà bạn gán cho cột equip_id. Điều này giúp tạo số tiếp theo tự động cho bản ghi được thêm vào.

Nếu bạn chỉ muốn xem bảng mà không có thứ tự, có thể chạy lệnh:

  • \dt
Output
          List of relations
 Schema |    Name    | Type  | Owner 
--------+------------+-------+-------
 public | playground | table | sammy
(1 row)

Bước 7 - Thêm, truy vấn và xóa dữ liệu trong bảng

Đến đây 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 slide , swing vào bảng:

  • 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 nên lưu ý khi nhập dữ liệu để tránh một số trường hợp treo/dừng lệnh thường gặp.

Một điều nữa 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 khi nào một hàng mới trong bảng được tạo.

Truy xuất thông tin bạn đã thêm bằng lệnh:

  • 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)

Ở đây, bạn có thể thấy rằng các thông tin đưa vào đúng mong muốn.

Nếu cái slide ở playground (sân-chơi) bị hỏng và bạn phải xóa nó, thì dùng lệnh:

  • 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)

Bạn thấy slide đã không còn trong bảng!

Bước 8 - Thêm và xóa các cột khỏi bảng

Sau khi tạo bảng, bạn có thể sửa đổi nó để thêm hoặc bớt các cột tương đối dễ dàng. 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 lệnh:

  • ALTER TABLE playground ADD last_maint date;

Nếu bạn 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)

Việc xóa một cột cũng đơn giản như vậy. Nếu bạn thấy rằng group  làm 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 lệnh:

  • ALTER TABLE playground DROP last_maint;

Thao tác này sẽ xóa cột last_maint, nhưng giữ nguyên tất cả các dữ liệu cột khác.

Bước 9 - Cập nhật dữ liệu trong bảng

Lúc này, 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 giá trị đã nhập.

Bạn có thể cập nhật các giá trị bằng cách truy vấn bản ghi và cột thành giá trị bạn muốn. Bạn có thể truy vấn bản ghi “swing” (điều này sẽ trùng với mọi swing trong bảng của bạn) và thay đổi màu của nó thành “red”:

  • UPDATE playground SET color = 'red' WHERE type = 'swing';

Bạn có thể xác minh thao tác đã thành công bằng cách:

  • SELECT * FROM playground;
Output
 equip_id | type  | color | location  | install_date 
----------+-------+-------+-----------+--------------
        2 | swing | red   | northwest | 2010-08-16
(1 row)

Như bạn thấy, swing của bạn hiện đã cập nhật màu đỏ - red.

Kết luận

Đến đây bạn đã được thiết lập với PostgreSQL trên server Ubuntu 18.04. Tuy nhiên, vẫn còn nhiều điều phải học với Postgres. Dưới đây là một số hướng dẫn khác bao gồm cách sử dụng Postgres:


Tags: Ubuntu

Các tin trước

Cài đặt Linux Apache MySQL PHP (LAMP) trên Ubuntu 18 04 2018-04-27

Bảo mật cơ bản Ubuntu 18.04 2018-04-27

Cài đặt Apache Web Server trên Ubuntu 18.04 2018-04-27

Cài đặt xác thực đăng nhập SSH Keys, không cần password trên Ubuntu 18.04 2018-04-27

Cài đặt SSH Keys trên Ubuntu 16.04 2018-04-12

Cài đặt Node.js trên Ubuntu 16.04 2018-03-07

Cài đặt Anaconda Python trên Ubuntu 16 04 2017-12-27

Cài đặt MySQL trên CentOS 7 2016-12-01

Cài đặt MySQL trên Ubuntu 16.04 2016-11-23

Cài đặt Node.js Application for Production trên Ubuntu 16.04 2016-11-01