Các module mở rộng chính thức của PostgreSQL
ServBay là một môi trường phát triển Web cục bộ mạnh mẽ, tích hợp nhiều công cụ cho lập trình viên, trong đó có hệ quản trị cơ sở dữ liệu PostgreSQL với đầy đủ chức năng. Sức mạnh của PostgreSQL không chỉ nằm ở lõi dữ liệu mà còn ở hệ sinh thái mở rộng chính thức đa dạng. ServBay đã cài sẵn phần lớn các module mở rộng chính thức của PostgreSQL, cho phép lập trình viên dễ dàng kích hoạt và sử dụng ngay trên môi trường phát triển cục bộ, mở rộng đáng kể năng lực cơ sở dữ liệu để đáp ứng các nhu cầu ứng dụng phức tạp.
Bài viết này sẽ giới thiệu một số module mở rộng PostgreSQL phổ biến và hướng dẫn bạn cách cài đặt, sử dụng chúng trong ServBay.
Tổng quan các module mở rộng phổ biến
PostgreSQL cung cấp rất nhiều module mở rộng, từ giám sát hiệu năng cho tới mở rộng kiểu dữ liệu, tìm kiếm toàn văn... Dưới đây là những tiện ích mà lập trình viên thường sử dụng trong công việc hàng ngày:
1. pg_stat_statements
- Chức năng: Thu thập và ghi nhận các thống kê về mọi câu lệnh SQL máy chủ thực thi, ví dụ số lần gọi, tổng thời gian thực thi, số dòng xử lý, v.v.
- Ứng dụng: Giúp quản trị viên cơ sở dữ liệu và lập trình viên phân tích hiệu năng truy vấn, xác định các câu truy vấn chậm và điểm nghẽn cần tối ưu.
- Lệnh cài đặt:sqlLưu ý: Sau khi cài cần thiết lập thêm
CREATE EXTENSION pg_stat_statements;
1shared_preload_libraries = 'pg_stat_statements'
trongpostgresql.conf
và khởi động lại dịch vụ PostgreSQL để kích hoạt thu thập số liệu. ServBay hỗ trợ sửa đổi cấu hình thuận tiện.
2. pg_trgm
- Chức năng: Cung cấp các hàm đo lường độ tương đồng văn bản dựa trên bộ ba ký tự (trigram) và hỗ trợ chỉ mục.
- Ứng dụng: Phục vụ tìm kiếm tương đồng, tìm kiếm mờ, hỗ trợ xử lý lỗi chính tả hoặc biến thể văn bản rất hiệu quả.
- Lệnh cài đặt:sql
CREATE EXTENSION pg_trgm;
1
3. hstore
- Chức năng: Đưa vào một loại dữ liệu giúp lưu trữ tập hợp các cặp khóa-giá trị trong một giá trị duy nhất của PostgreSQL.
- Ứng dụng: Phù hợp với các trường hợp lưu thuộc tính động, dữ liệu không cấu trúc hoặc bán cấu trúc như cấu hình, metadata hay tùy chọn người dùng mà không cần ràng buộc vào cấu trúc bảng cứng nhắc.
- Lệnh cài đặt:sql
CREATE EXTENSION hstore;
1
4. citext
- Chức năng: Cung cấp kiểu dữ liệu chuỗi văn bản không phân biệt hoa thường (case-insensitive).
- Ứng dụng: Giúp lưu trữ và so sánh tên người dùng, email, nhãn, v.v mà không cần sử dụng hàm
LOWER()
liên tục trong truy vấn, đơn giản hóa logic phần mềm. - Lệnh cài đặt:sql
CREATE EXTENSION citext;
1
5. uuid-ossp
- Chức năng: Cung cấp các hàm tạo mã định danh duy nhất toàn cục (UUID) với nhiều chuẩn version khác nhau (ví dụ version 1, 3, 4, 5).
- Ứng dụng: Được dùng để tạo khóa chính, mã phiên làm việc, xác thực hoặc gắn mã duy nhất trong hệ phân tán.
- Lệnh cài đặt:sqlLưu ý: tên module có dấu gạch nối nên cần đặt trong dấu ngoặc kép khi tạo extension.
CREATE EXTENSION "uuid-ossp";
1
6. intarray
- Chức năng: Thêm các hàm và toán tử thao tác nâng cao với mảng số nguyên.
- Ứng dụng: Hữu ích khi cần thực hiện phép tập hợp, kiểm tra, sắp xếp… ngay trong cơ sở dữ liệu với mảng int mà không cần xử lý thủ công ở ứng dụng bên ngoài.
- Lệnh cài đặt:sql
CREATE EXTENSION intarray;
1
7. btree_gin
- Chức năng: Thêm hỗ trợ thao tác chỉ mục GIN (Generalized Inverted Index) cho các kiểu dữ liệu B-tree (int, text, date...).
- Ứng dụng: GIN thích hợp để đánh chỉ mục các cột dạng tập giá trị (array,
hstore
,tsvector
) vàbtree_gin
giúp mở rộng cho các thành phần có thể đánh chỉ mục kiểu B-tree, tối ưu hóa truy vấn hiệu quả. - Lệnh cài đặt:sql
CREATE EXTENSION btree_gin;
1
8. btree_gist
- Chức năng: Hỗ trợ thao tác chỉ mục GiST (Generalized Search Tree) cho các kiểu dữ liệu B-tree.
- Ứng dụng: GiST là cấu trúc chỉ mục phổ quát;
btree_gist
cho phép áp dụng trên các trường dữ liệu dễ đánh chỉ mục với nhiều kiểu truy vấn (phạm vi, bao hàm...), hữu ích khi cần nhiều loại chỉ mục trên một bảng. - Lệnh cài đặt:sql
CREATE EXTENSION btree_gist;
1
9. cube
- Chức năng: Đưa vào kiểu dữ liệu đại diện cho điểm/lập phương đa chiều với các phép toán kèm theo.
- Ứng dụng: Hỗ trợ thao tác dữ liệu đa chiều như điểm không gian địa lý đơn giản (2D, 3D), phân tích đa chiều (OLAP) hoặc các phép tính khoa học.
- Lệnh cài đặt:sql
CREATE EXTENSION cube;
1
10. fuzzystrmatch
- Chức năng: Cung cấp nhiều hàm đo khoảng cách, độ giống nhau giữa chuỗi văn bản như Levenshtein, Soundex, Metaphone,...
- Ứng dụng: Phân tích tương đồng chuỗi, kiểm tra lỗi chính tả, làm sạch và loại trùng dữ liệu.
- Lệnh cài đặt:sql
CREATE EXTENSION fuzzystrmatch;
1
11. plpgsql
- Chức năng: Ngôn ngữ thủ tục của PostgreSQL, cho phép viết thủ tục lưu trữ, hàm trigger và khối mã ẩn danh phía server.
- Ứng dụng: Dùng để thực thi logic business phức tạp, tự động hóa xử lý dữ liệu ở phía máy chủ.
plpgsql
thường được cài sẵn mặc định nhưng có thể dùng lệnhCREATE EXTENSION
để xác nhận hoặc phục hồi lại. - Lệnh cài đặt:sql
CREATE EXTENSION plpgsql;
1
12. tablefunc
- Chức năng: Bổ sung các hàm thao tác và chuyển đổi dữ liệu bảng, nổi bật là hàm
crosstab
. - Ứng dụng: Hữu ích để tạo báo cáo pivot/table, chuyển các giá trị thành nhiều cột - thường dùng cho các tác vụ tổng hợp, phân tích dữ liệu.
- Lệnh cài đặt:sql
CREATE EXTENSION tablefunc;
1
13. dblink
- Chức năng: Hỗ trợ kết nối và truy vấn từ một cơ sở dữ liệu PostgreSQL này đến một cơ sở dữ liệu PostgreSQL khác.
- Ứng dụng: Trao đổi, di chuyển dữ liệu giữa các database mà không cần viết logic kết nối riêng ở tầng ứng dụng.
- Lệnh cài đặt:sql
CREATE EXTENSION dblink;
1
14. postgres_fdw
- Chức năng: Bổ sung Foreign Data Wrapper cho phép truy vấn bảng ở một cơ sở dữ liệu PostgreSQL khác như truy cập bảng cục bộ.
- Ứng dụng: Hợp nhất dữ liệu, liên kết bảng từ nhiều database khác nhau, hỗ trợ tối ưu truy vấn mạnh mẽ hơn so với
dblink
. - Lệnh cài đặt:sql
CREATE EXTENSION postgres_fdw;
1
15. pgcrypto
- Chức năng: Bổ sung nhiều hàm mã hóa, giải mã, băm, mã hóa đối xứng, bất đối xứng...
- Ứng dụng: Đảm bảo bảo mật dữ liệu, lưu trữ mật khẩu đã băm, tạo và xác minh chữ ký số ở tầng cơ sở dữ liệu.
- Lệnh cài đặt:sql
CREATE EXTENSION pgcrypto;
1
Đây mới chỉ là một phần nhỏ những module mở rộng chính thức được tích hợp trong ServBay. ServBay hướng tới việc cung cấp đầy đủ đa số extension phổ biến từ cộng đồng PostgreSQL, đáp ứng tối đa nhu cầu lập trình viên.
Cài đặt và sử dụng module mở rộng PostgreSQL trong ServBay
Việc tích hợp và kích hoạt các module mở rộng PostgreSQL trên ServBay rất đơn giản. Lưu ý rằng extension luôn cài cho từng cơ sở dữ liệu riêng biệt; bạn cần kích hoạt ở từng database mình muốn sử dụng.
Điều kiện cần:
- Đảm bảo ServBay đang chạy, dịch vụ PostgreSQL cũng đã khởi động.
Các bước thao tác:
Kết nối vào cơ sở dữ liệu PostgreSQL đích: Mở terminal (ví dụ Terminal trên macOS, iTerm2...), dùng công cụ dòng lệnh
psql
để kết nối tới database bạn muốn cài extension. Theo mặc định, tài khoản và tên database do ServBay cài đặt làpostgres
.bashpsql -U your_username -d your_database
1Ví dụ, kết nối vào database mặc định
postgres
:bashpsql -U postgres -d postgres
1Nếu quá trình kết nối yêu cầu mật khẩu, hãy dùng mật khẩu root/postgres đã thiết lập khi cài ServBay.
Cài module mở rộng: Khi kết nối thành công, bạn sẽ vào giao diện dòng lệnh
psql
. Sử dụng lệnhCREATE EXTENSION
để cài module mong muốn, thaymodule_name
bằng tên module bạn cần.sqlCREATE EXTENSION module_name;
1Ví dụ, để cài
pg_trgm
:sqlCREATE EXTENSION pg_trgm;
1Kiểm tra lại cài đặt: Sau khi cài đặt xong, dùng lệnh
\dx
để kiểm tra danh sách các module mở rộng đã kích hoạt cho cơ sở dữ liệu hiện tại.sql\dx
1
Ví dụ: Kích hoạt extension pg_trgm
Dưới đây là một phiên làm việc thực tế kích hoạt extension pg_trgm
trên database postgres
bằng psql:
sql
# Chạy trong terminal để kết nối vào database
psql -U postgres -d postgres
# Khi kết nối thành công, hiện prompt psql
psql (16.3 (ServBay))
Type "help" for help.
postgres=# -- Xem danh sách các extension đã có (thường gồm plpgsql và pgcrypto)
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+------------------------------
pgcrypto | 1.3 | public | cryptographic functions
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
postgres=# -- Cài extension pg_trgm
postgres=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
postgres=# -- Kiểm tra danh sách extension sau khi kích hoạt pg_trgm
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+-------------------------------------------------------------------
pg_trgm | 1.6 | public | text similarity measurement and index searching based on trigrams
pgcrypto | 1.3 | public | cryptographic functions
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(3 rows)
postgres=# -- Extension đã được cài thành công, giờ bạn có thể sử dụng các hàm, toán tử của pg_trgm cho database này.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Tra cứu danh sách các extension PostgreSQL có trong ServBay
Nếu muốn biết trước tất cả các extension có sẵn kèm phiên bản PostgreSQL được ServBay cung cấp, hãy chạy truy vấn SQL sau trên bất kỳ database nào mà bạn đã kết nối:
sql
SELECT * FROM pg_available_extensions ORDER BY name;
1
Kết quả trả về là bảng với tên, phiên bản mặc định, trạng thái cài đặt và mô tả chi tiết từng extension mà PostgreSQL trên ServBay hỗ trợ.
Ví dụ kết quả:
sql
name | default_version | installed_version | comment
------------------------------+-----------------+-------------------+---------------------------------------------------------------------------------------------------------------------
address_standardizer | 3.4.2 | | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.
address_standardizer_data_us | 3.4.2 | | Address Standardizer US dataset example
adminpack | 2.1 | | administrative functions for PostgreSQL
amcheck | 1.3 | | functions for verifying relation integrity
autoinc | 1.0 | | functions for autoincrementing fields
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.3 | | support for indexing common datatypes in GIN
btree_gist | 1.7 | | support for indexing common datatypes in GiST
citext | 1.6 | | data type for case-insensitive character strings
cube | 1.5 | | data type for multidimensional cubes
dblink | 1.2 | | connect to other PostgreSQL databases from within a database
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
file_fdw | 1.0 | | foreign-data wrapper for flat file access
fuzzystrmatch | 1.2 | | determine similarities and distance between strings
hstore | 1.8 | | data type for storing sets of (key, value) pairs
insert_username | 1.0 | | functions for tracking who changed a table
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.5 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.2 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.2 | | data type for hierarchical tree-like structures
moddatetime | 1.0 | | functions for tracking last modification time
old_snapshot | 1.0 | | utilities in support of old_snapshot_threshold
pageinspect | 1.12 | | inspect the contents of database pages at a low level
pg_buffercache | 1.4 | | examine the shared buffer cache
pg_freespacemap | 1.2 | | examine the free space map (FSM)
pg_jieba | 1.1.1 | | a parser for full-text search of Chinese
pg_prewarm | 1.2 | | prewarm relation data
pg_stat_statements | 1.10 | | track planning and execution statistics of all SQL statements executed
pg_surgery | 1.0 | | extension to perform surgery on a damaged relation
pg_trgm | 1.6 | 1.6 | text similarity measurement and index searching based on trigrams
pg_visibility | 1.2 | | examine the visibility map (VM) and page-level visibility info
pg_walinspect | 1.1 | | functions to inspect contents of PostgreSQL Write-Ahead Log
pgcrypto | 1.3 | 1.3 | cryptographic functions
pgrouting | 3.6.2 | | pgRouting Extension
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.5 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
postgis | 3.4.2 | | PostGIS geometry and geography spatial types and functions
postgis_sfcgal | 3.4.2 | | PostGIS SFCGAL functions
postgis_tiger_geocoder | 3.4.2 | | PostGIS tiger geocoder and reverse geocoder
postgres_fdw | 1.1 | | foreign-data wrapper for remote PostgreSQL servers
refint | 1.0 | | functions for implementing referential integrity (obsolete)
seg | 1.4 | | data type for representing line segments or floating-point intervals
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tcn | 1.0 | | Triggered change notifications
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
vector | 0.7.0 | | vector data type and ivfflat and hnsw access methods
xml2 | 1.1 | | XPath querying and XSLT
zhparser | 2.2 | | a parser for full-text search of Chinese
(55 rows)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Lưu ý: đây chỉ là bảng mẫu, các extension thực tế có thể thay đổi tùy vào phiên bản ServBay hoặc PostgreSQL đi kèm.
Tổng kết
ServBay với việc tích hợp sẵn nhiều module mở rộng chính thức cho PostgreSQL đã đơn giản hóa quá trình khai thác những chức năng mạnh mẽ cho môi trường phát triển cục bộ. Lập trình viên không cần mất thời gian xây dựng hay cài đặt phức tạp mà chỉ với vài lệnh SQL là có thể bật những extension cần thiết, tập trung tối đa vào phát triển ứng dụng. Các module này giúp bạn nhanh chóng bổ sung các tính năng nâng cao như phân tích hiệu năng, tìm kiếm toàn văn, bảo mật dữ liệu... cho dự án của mình.