โมดูลส่วนขยายอย่างเป็นทางการของ PostgreSQL
ServBay เป็นสภาพแวดล้อมสำหรับการพัฒนาเว็บบนเครื่องที่ทรงพลัง มาพร้อมเครื่องมือสำหรับนักพัฒนาหลากหลายประเภท รวมถึงฐานข้อมูล PostgreSQL ที่อัดแน่นด้วยฟีเจอร์ PostgreSQL มีจุดแข็งไม่ใช่เพียงแค่ฟังก์ชันหลักเท่านั้น แต่ยังเหนือกว่าด้วยระบบนิเวศส่วนขยาย (Extensions) ขนาดใหญ่ที่เป็นทางการด้วย ServBay ได้ติดตั้งส่วนขยาย PostgreSQL อย่างเป็นทางการไว้ล่วงหน้าจำนวนมาก นักพัฒนาจึงสามารถเปิดใช้งานและใช้โมดูลเหล่านี้ในเครื่องได้ทันที ช่วยต่อยอดความสามารถของฐานข้อมูลให้ตอบโจทย์แอปพลิเคชันที่ซับซ้อนได้อย่างยอดเยี่ยม
บทความนี้จะแนะนำโมดูลส่วนขยาย PostgreSQL ที่นิยมใช้ และแนะแนวทางติดตั้งและใช้งานบน ServBay
ภาพรวมส่วนขยายที่นิยม
PostgreSQL อย่างเป็นทางการมีส่วนขยายหลากหลาย ครอบคลุมตั้งแต่การมอนิเตอร์สมรรถนะ ชนิดข้อมูล ไปจนถึงการค้นหาข้อความแบบเต็มรูปแบบ เป็นต้น ด้านล่างนี้คือโมดูลที่นักพัฒนาพบว่าใช้บ่อยในงานประจำ:
1. pg_stat_statements
- ฟีเจอร์: รวบรวมและบันทึกข้อมูลสถิติของทุก SQL statement ที่รันบน server เช่น จำนวนครั้งที่เรียกใช้, เวลารวมที่ใช้, จำนวนแถวที่ดำเนินการ ฯลฯ
- ประโยชน์: ใช้ช่วยผู้ดูแลฐานข้อมูลและนักพัฒนาในการวิเคราะห์สมรรถนะของ query ระบุจุดที่ query ทำงานช้า และช่วยปรับปรุงประสิทธิภาพ
- คำสั่งติดตั้ง:sqlหมายเหตุ: หลังติดตั้ง ควรตั้งค่า
CREATE EXTENSION pg_stat_statements;
1shared_preload_libraries = 'pg_stat_statements'
ในpostgresql.conf
และรีสตาร์ท PostgreSQL เพื่อใช้งานฟีเจอร์นี้ได้สมบูรณ์ ServBay มีตัวช่วยสำหรับแก้ไข config เหล่านี้ให้สะดวก
2. pg_trgm
- ฟีเจอร์: มีฟังก์ชันวัดความคล้ายคลึงของข้อความ (text similarity) และรองรับดัชนีแบบ trigram
- ประโยชน์: รองรับการค้นหาแบบ fuzzy, similarity search และ full-text search เหมาะสำหรับค้นหาคำที่สะกดผิดหรือคำที่มีรูปแบบใกล้เคียงกัน
- คำสั่งติดตั้ง:sql
CREATE EXTENSION pg_trgm;
1
3. hstore
- ฟีเจอร์: เพิ่มชนิดข้อมูลสำหรับเก็บชุดคู่ค่า (key-value) ในคอลัมน์เดียวของ PostgreSQL
- ประโยชน์: เหมาะสำหรับข้อมูลที่มีโครงสร้างยืดหยุ่นหรือกึ่งโครงสร้าง เช่น ข้อมูลตั้งค่า, metadata, preference ของผู้ใช้งาน ที่ไม่ต้องกำหนด schema ตารางไว้อย่างตายตัว
- คำสั่งติดตั้ง:sql
CREATE EXTENSION hstore;
1
4. citext
- ฟีเจอร์: เพิ่มชนิดข้อมูล string ที่ไม่สนใจตัวพิมพ์ใหญ่-เล็ก (case-insensitive)
- ประโยชน์: ใช้เมื่อจำเป็นต้องเปรียบเทียบค่าตัวอักษรแบบไม่แยก case เช่น ชื่อผู้ใช้ อีเมล หรือ tags โดยไม่ต้องเรียกใช้ฟังก์ชัน
LOWER()
บ่อยๆ - คำสั่งติดตั้ง:sql
CREATE EXTENSION citext;
1
5. uuid-ossp
- ฟีเจอร์: มีฟังก์ชันสร้างรหัสเฉพาะ (UUID) ตามมาตรฐานเวอร์ชันต่างๆ เช่น version 1, 3, 4, 5
- ประโยชน์: ใช้สำหรับกำหนดรหัสเฉพาะของแถว เช่น Primary Key, Session ID, Token ในระบบแบบกระจาย
- คำสั่งติดตั้ง:sqlหมายเหตุ: ชื่อส่วนขยายมีขีดกลาง จำเป็นต้องใส่ double quote เวลาระบุชื่อในคำสั่ง
CREATE EXTENSION "uuid-ossp";
1
6. intarray
- ฟีเจอร์: เพิ่มฟังก์ชันและ operator สำหรับจัดการอาร์เรย์ของจำนวนเต็ม (integer arrays)
- ประโยชน์: เหมาะสำหรับกรณีที่ต้องการจัดการ array ของเลขจำนวนเต็มโดยตรงในฐานข้อมูล เช่น หาจุดร่วม, ตรวจซ้ำ หรือเรียงลำดับ
- คำสั่งติดตั้ง:sql
CREATE EXTENSION intarray;
1
7. btree_gin
- ฟีเจอร์: เพิ่มการรองรับ GIN (Generalized Inverted Index) index ให้กับชนิดข้อมูลที่ B-tree รองรับ เช่น int, text, date ฯลฯ
- ประโยชน์: GIN index ถูกใช้กับข้อมูล multi-value (เช่น array, hstore, tsvector) ส่วน btree_gin ทำให้ใช้ GIN กับข้อมูลที่ใช้ btree ได้ เพิ่มประสิทธิภาพ query
- คำสั่งติดตั้ง:sql
CREATE EXTENSION btree_gin;
1
8. btree_gist
- ฟีเจอร์: รองรับการสร้าง GiST (Generalized Search Tree) index สำหรับข้อมูล B-tree
- ประโยชน์: GiST เป็นโครงสร้าง index อเนกประสงค์ btree_gist ทำให้สร้าง GiST index กับข้อมูลที่ B-tree รองรับได้ เหมาะกับ query หมวด range หรือ composite index บนหลายคอลัมน์
- คำสั่งติดตั้ง:sql
CREATE EXTENSION btree_gist;
1
9. cube
- ฟีเจอร์: เพิ่มชนิดข้อมูลสำหรับเก็บข้อมูลแบบหลายมิติ (multidimensional cubes/points) และฟังก์ชัน/โอเปอเรเตอร์ในการจัดการ
- ประโยชน์: เหมาะสำหรับงานที่เกี่ยวกับข้อมูลหลายมิติ เช่น พิกัด 2D/3D, งาน data warehouse หรือการคำนวณทางวิทยาศาสตร์ที่ซับซ้อน
- คำสั่งติดตั้ง:sql
CREATE EXTENSION cube;
1
10. fuzzystrmatch
- ฟีเจอร์: ฟังก์ชันสำหรับวัดความคล้ายคลึง (similarity) และระยะห่าง (distance) ของ string เช่น Levenshtein, Soundex, Metaphone ฯลฯ
- ประโยชน์: ใช้สำหรับการเปรียบเทียบ string แบบ fuzz, ตรวจสอบการสะกด, ลบข้อมูลซ้ำ ฯลฯ
- คำสั่งติดตั้ง:sql
CREATE EXTENSION fuzzystrmatch;
1
11. plpgsql
- ฟีเจอร์: เป็นภาษาโปรซีเยอร์พื้นฐานของ PostgreSQL สำหรับเขียน stored procedures, trigger functions และ anonymous blocks
- ประโยชน์: ใช้เขียนกระบวนการ/ตรรกะธุรกิจฝั่งเซิร์ฟเวอร์, งานอัตโนมัติ, ประมวลผลข้อมูล ชั้นนี้ติดตั้งมาโดย default อยู่แล้ว แต่สามารถเรียก
CREATE EXTENSION
เพื่อยืนยันหรือสร้างใหม่ได้ - คำสั่งติดตั้ง:sql
CREATE EXTENSION plpgsql;
1
12. tablefunc
- ฟีเจอร์: มีฟังก์ชันสำหรับจัดการและแปลงข้อมูลทั้งตาราง โดยเด่นที่ฟังก์ชัน
crosstab
- ประโยชน์: ใช้สำหรับการสร้าง cross-tab หรือ pivot table แปลงค่าคอลัมน์เป็นหลายคอลัมน์ เหมาะกับงานสรุปผลและออกรายงาน
- คำสั่งติดตั้ง:sql
CREATE EXTENSION tablefunc;
1
13. dblink
- ฟีเจอร์: เชื่อมต่อไปยัง PostgreSQL ฐานอื่นเพื่อรัน query ได้จากภายในฐานข้อมูลเดียวกัน
- ประโยชน์: ใช้โยกย้ายข้อมูลหรือ query ข้ามฐาน (cross-database) ได้แบบง่ายๆ โดยไม่ต้องเขียน logic บนฝั่งแอปพลิเคชัน
- คำสั่งติดตั้ง:sql
CREATE EXTENSION dblink;
1
14. postgres_fdw
- ฟีเจอร์: ทำหน้าที่เป็น Foreign Data Wrapper เพื่อเชื่อมต่อและเข้าถึงข้อมูลตารางใน PostgreSQL ฐานอื่นได้เสมือนเป็นตารางในเครื่อง
- ประโยชน์: รองรับ query แบบข้ามฐานและงานผสานข้อมูลสเกลใหญ่ สะดวกกว่าการใช้ dblink ทั้งในแง่ความยืดหยุ่นและประสิทธิภาพ
- คำสั่งติดตั้ง:sql
CREATE EXTENSION postgres_fdw;
1
15. pgcrypto
- ฟีเจอร์: รวมฟังก์ชันเข้ารหัส/ถอดรหัส เช่น hash, symmetric encryption, public-key encryption ต่างๆ
- ประโยชน์: ใช้เข้ารหัสข้อมูลในระดับฐานข้อมูล, เก็บ hash รหัสผ่าน, สร้าง/ตรวจสอบ digital signature ฯลฯ เพื่อความปลอดภัยสูงสุด
- คำสั่งติดตั้ง:sql
CREATE EXTENSION pgcrypto;
1
นี่เป็นเพียงตัวอย่างบางส่วนของโมดูลส่วนขยาย PostgreSQL ที่ติดตั้งมากับ ServBay เท่านั้น ServBay พยายามรวมส่วนขยายหลักจากชุมชน PostgreSQL ให้ครอบคลุมและตอบโจทย์งานหลากหลายสำหรับนักพัฒนา
วิธีติดตั้งและใช้งานโมดูลส่วนขยาย PostgreSQL บน ServBay
การติดตั้งและใช้งานส่วนขยาย PostgreSQL บน ServBay ง่ายและตรงไปตรงมา ส่วนขยายทุกตัวจะถูกติดตั้งลงใน ฐานข้อมูลทีละฐาน (per-database) ดังนั้นต้องใช้คำสั่งเปิดใช้งานในแต่ละ database ที่ต้องการใช้
เงื่อนไขเบื้องต้น:
- ตรวจสอบให้แน่ใจว่า ServBay กำลังทำงาน และบริการ PostgreSQL เริ่มต้นแล้ว
ขั้นตอนการใช้งาน:
เชื่อมต่อฐานข้อมูล PostgreSQL เป้าหมาย: เปิดแอป Terminal (บน macOS หรือ iTerm2) แล้วใช้คำสั่ง
psql
เพื่อเชื่อมต่อกับฐานข้อมูลที่ต้องการติดตั้งส่วนขยาย (ผู้ใช้เริ่มต้นที่ ServBay ตั้งไว้คือpostgres
ฐานข้อมูลชื่อpostgres
)bashpsql -U your_username -d your_database
1เช่น หากเชื่อมต่อฐานข้อมูล
postgres
ที่ติดตั้งมาด้วยbashpsql -U postgres -d postgres
1หากถูกถามรหัสผ่าน ให้ใส่รหัสผ่านที่ตั้งไว้สำหรับ root/postgres users ในหน้า PostgreSQL ของ ServBay
ติดตั้งโมดูลส่วนขยาย: เมื่อเชื่อมต่อสำเร็จจะเข้าสู่ prompt
psql
ให้รันคำสั่งCREATE EXTENSION
โดยแทนmodule_name
ด้วยชื่อส่วนขยายที่ต้องการsqlCREATE EXTENSION module_name;
1เช่นติดตั้ง
pg_trgm
sqlCREATE EXTENSION pg_trgm;
1ตรวจสอบการติดตั้ง: ติดตั้งเสร็จแล้วสามารถใช้คำสั่ง
\dx
เพื่อตรวจสอบรายชื่อส่วนขยายที่มีในฐานข้อมูลได้ว่าติดตั้งสำเร็จหรือไม่sql\dx
1
ตัวอย่าง: เปิดใช้งานส่วนขยาย pg_trgm
ด้านล่างคือขั้นตอนการเชื่อมต่อฐานข้อมูล postgres
และเปิดใช้งาน pg_trgm
ใน psql:
sql
# ใน Terminal ให้รันคำสั่งเพื่อเชื่อมต่อฐานข้อมูล
psql -U postgres -d postgres
# เมื่อเชื่อมต่อสำเร็จ จะเห็น prompt psql
psql (16.3 (ServBay))
Type "help" for help.
postgres=# -- ตรวจสอบส่วนขยายที่ติดตั้งไว้ (ตัวอย่าง: อาจพบแค่ plpgsql และ 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=# -- ติดตั้งส่วนขยาย pg_trgm
postgres=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
postgres=# -- ตรวจสอบว่าติดตั้งสำเร็จหรือไม่
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=# -- สำเร็จ สามารถใช้งานฟังก์ชันและ operator ของ pg_trgm ได้ทันที
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
ค้นหารายชื่อส่วนขยาย PostgreSQL ที่มีใน ServBay
หากต้องการทราบรายชื่อส่วนขยายทั้งหมดที่ ServBay ติดตั้งมาพร้อมกับ PostgreSQL สามารถรันคำสั่ง SQL ต่อไปนี้หลังเชื่อมต่อฐานข้อมูล
sql
SELECT * FROM pg_available_extensions ORDER BY name;
1
คำสั่งนี้จะแสดงตารางรายละเอียดส่วนขยายที่มีอยู่ทั้งหมดใน ServBay พร้อมชื่อ, เวอร์ชัน, สถานะการติดตั้ง และคำอธิบาย
ตัวอย่างผลลัพธ์ (รายการและเวอร์ชันอาจแตกต่างกันตามเวอร์ชัน PostgreSQL ที่มาพร้อม ServBay):
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
โปรดทราบว่านี่เป็นข้อมูลตัวอย่าง รายละเอียดส่วนขยายและเวอร์ชันจริงใน ServBay ของคุณอาจแตกต่างกันตามเวอร์ชันของซอฟต์แวร์
สรุป
ServBay อำนวยความสะดวกอย่างมากในการใช้งาน PostgreSQL ส่วนขยายระดับมืออาชีพในเครื่อง นักพัฒนาไม่ต้องวุ่นวายกับการคอมไพล์หรือติดตั้งเอง เพียงแค่ใช้คำสั่ง SQL ก็เปิดใช้งานส่วนขยายในฐานข้อมูลเฉพาะที่ต้องการได้ทันที คุณจะสามารถโฟกัสกับการพัฒนาแอปพลิเคชันโดยไม่พลาดฟีเจอร์ขั้นสูงของ PostgreSQL เช่น การวิเคราะห์สมรรถนะฐานข้อมูล, การค้นหาข้อความเต็มรูปแบบ, หรือความปลอดภัยของข้อมูล ฯลฯ ได้อย่างเต็มประสิทธิภาพ