การติดตั้ง PostgreSQL ใน Amazon Linux 2023 บน EC2 และการใช้งานเบื้องต้น
POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้จะมาแนะนำการติดตั้ง PostgreSQL 16 ใน Amazon Linux 2023 และการใช้งานเบื้องต้น โดยการ Run Command ตามขั้นตอนในบทความนี้
สิ่งที่ต้องมี
※มี EC2 Instance และเชื่อมต่อกับ Instance แล้ว
ดูตัวอย่างได้ที่ลิงก์บทความด้านล่างนี้
PostgreSQL คืออะไร
PostgreSQL เป็นระบบฐานข้อมูลเชิงสัมพันธ์แบบโอเพ่นซอร์สที่ทรงพลังพร้อมการพัฒนาอย่างต่อเนื่องมากกว่า 30 ปี ซึ่งได้รับชื่อเสียงอย่างมากในด้านความน่าเชื่อถือ ความทนทานของฟีเจอร์ และประสิทธิภาพ
ขั้นตอน
ขั้นตอนการติดตั้งและใช้งาน PostgreSQL ในตัวอย่างนี้ จะดำเนินการ Run command ใน Terminal PuTTY ทั้งหมด
รันคำสั่งพื้นฐานของ Linux
เข้าใช้งานสิทธิ์ root
sudo su -
อัปเดตเซิร์ฟเวอร์ให้เป็นปัจจุบัน
yum update -y
ติดตั้ง PostgreSQL 16
คำสั่งติดตั้ง PostgreSQL 16
yum install postgresql16-server -y
คำสั่งสร้างไฟล์สถานะเริ่มต้น DB ใน PostgreSQL
postgresql-setup initdb
เมื่อรันคำสั่งนี้แล้ว ระบบจะสร้างโฟลเดอร์ '/var/lib/pgsql/data'
ขึ้นมาเป็นโฟลเดอร์เวอร์ชันสำหรับใส่ฐานข้อมูล
Output (example)
[root@ip-xx-xx-xx-xx ~]# postgresql-setup initdb
WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
[root@ip-xx-xx-xx-xx ~]#
เริ่มต้นระบบ PostgreSQL
คำสั่งเริ่มต้นระบบ PostgreSQL
systemctl start postgresql
คำสั่งเปิดการใช้งาน PostgreSQL เมื่อเริ่มต้น OS
systemctl enable postgresql
เชื่อมต่อและ Login
คำสั่งเชื่อมต่อ postgres
su - postgres
ถ้าเชื่อมต่อได้แล้วจะแสดงเป็น [postgres@ip-xx-xx-xx-xx ~]$
Output (example)
[root@ip-xx-xx-xx-xx ~]# su - postgres
[postgres@ip-xx-xx-xx-xx ~]$
คำสั่งเข้าใช้งาน psql
psql
ถ้าเข้าใช้งานได้แล้วจะเปลี่ยนเป็น postgres=#
Output (example)
[postgres@ip-xx-xx-xx-xx ~]$ psql
psql (16.5)
Type "help" for help.
postgres=#
ตั้งค่า Password
ตั้งค่า Password ที่เราต้องการ (เปลี่ยน ********
ให้เป็นรหัสของคุณ)
・postgres = Username
・password = รหัสผ่านของเรา
alter role postgres with password '********';
Password: P@ssW0rd
นี้เป็นแค่ตัวอย่าง
Output (example)
postgres=# alter role postgres with password 'P@ssW0rd';
ALTER ROLE
postgres=#
กลับมาที่ root
คำสั่งออกจาก psql
\q
เมื่อออกจาก postgres
แล้วจะเปลี่ยนเป็น [postgres@ip-xx-xx-xx-xx ~]$
Output (example)
postgres=# \q
[postgres@ip-xx-xx-xx-xx ~]$
คำสั่งออกจาก prompt ต่างๆ ในครั้งนี้ออกจาก postgres กลับมาที่ root
exit
เมื่อออกจาก postgres แล้วจะเปลี่ยนเป็น [root@ip-xxx-xx-xx-xxx ~]#
Output (example)
[postgres@ip-xx-xx-xx-xx ~]$ exit
logout
[root@ip-xx-xx-xx-xx ~]#
ตั้งค่าการเชื่อมต่อ PostgreSQL
คำสั่งตั้งค่าการเชื่อมต่อ PostgreSQL
vi /var/lib/pgsql/data/pg_hba.conf
แล้วกดปุ่ม J
หรือลูกศร ↓
ที่แป้นพิมพ์เพื่อเลื่อนลงมาด้านล่างสุด และแก้ไข METHOD
ของ TYPE [local, host, host] ให้เป็น md5
เหมือนกับช่อง METHOD (Modified) ในตารางและตัวอย่างด้านล่างนี้
# TYPE | DATABASE | USER | ADDRESS | METHOD | → | METHOD (Modified) |
---|---|---|---|---|---|---|
local | all | all | peer | → | md5 | |
host | all | all | 127.0.0.1/32 | ident | → | md5 |
host | all | all | ::1/128 | ident | → | md5 |
แล้วบันทึกโดยกดปุ่ม Esc
ให้คำว่า -- INSERT --
หายไป และพิมพ์ :x
+ Enter
Output (example)
"ไม่ได้แสดงส่วนบน"
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
"ไม่ได้แสดงส่วนล่าง"
คำสั่ง Restart PostgreSQL
systemctl restart postgresql
ทดสอบการจัดการ Database
เชื่อมต่อ psql
คำสั่งเชื่อมต่อจาก psql ด้วย ec2-user
psql -h localhost -U postgres
Output (example) 1
[root@ip-xx-xx-xx-xx ~]# psql -h localhost -U postgres
Password for user postgres: [your-password] # ขณะพิมพ์ Password ตัวอักษรจะไม่แสดงให้เห็น
หาก Login psql ได้แล้ว จะแสดงหน้าจอแบบนี้ แล้วจะเปลี่ยนเป็น postgres=#
Output (example) 2
[root@ip-xx-xx-xx-xx ~]# psql -h localhost -U postgres
Password for user postgres:
psql (16.5)
Type "help" for help.
postgres=#
สร้าง Database
คำสั่งสร้าง Database (เปลี่ยน database_name
ให้เป็นชื่อ Database ของคุณ เช่น tinnakorn
)
CREATE DATABASE database_name;
ตัวอย่างนี้ใช้ Database ชื่อว่า tinnakorn
Output (example)
postgres=# CREATE DATABASE tinnakorn;
CREATE DATABASE
postgres=#
คำสั่งแสดงรายการ database
\l
จะเห็นว่ามีชื่อ Database tinnakorn
แสดงขึ้นมา
Output (example)
postgres=# \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+---------+---------+------------+-----------+-----------------------
postgres | postgres | UTF8 | libc | C.UTF-8 | C.UTF-8 | | |
template0 | postgres | UTF8 | libc | C.UTF-8 | C.UTF-8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | libc | C.UTF-8 | C.UTF-8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
tinnakorn | postgres | UTF8 | libc | C.UTF-8 | C.UTF-8 | | |
(4 rows)
postgres=#
สร้าง Table
คำสั่งเปลี่ยนการเชื่อมต่อ Database (เปลี่ยน database_name
ให้เป็นชื่อ Database ของคุณที่สร้างจากขั้นตอนที่แล้ว เช่น tinnakorn
)
\c database_name
จะเห็นว่าเปลี่ยนเป็น tinnakorn=#
Output (example)
postgres=# \c tinnakorn
You are now connected to database "tinnakorn" as user "postgres".
tinnakorn=#
คำสั่งสร้าง Table (เปลี่ยน table_name
ให้เป็นชื่อ Table ของคุณ)
create table table_name(id int, message varchar(255));
ตัวอย่างนี้ใช้ Table ชื่อว่า test
Output (example)
tinnakorn=# create table test(id int, message varchar(255));
CREATE TABLE
tinnakorn=#
คำสั่งแสดงรายการ Table
\dt
จะเห็นว่ามีชื่อ Table test
แสดงขึ้นมา
Output (example)
tinnakorn=# \dt
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | test | table | postgres
(1 row)
tinnakorn=#
Insert ข้อมูลลงใน Table
คำสั่ง Insert ข้อมูลลงใน Table (เปลี่ยน table_name
ให้เป็นชื่อ Table ที่คุณสร้างเมื่อสักครู่นี้ และเปลี่ยน column
, values
ตามต้องการ)
insert into table_name(column1, column2) values(value1, value2);
ข้อมูลของตัวอย่างนี้คือ ["column = (id, message)" และ "value = (1, 'test1')"]
Output (example)
tinnakorn=# insert into test(id, message) values(1, 'test1');
INSERT 0 1
tinnakorn=#
ดึงข้อมูลจาก Table
คำสั่งดึงข้อมูลจาก Table ทั้งหมดเพื่อแสดงข้อมูล
select * from test;
Output (example)
tinnakorn=# select * from test;
id | message
----+---------
1 | test1
(1 row)
tinnakorn=#
ออกจาก Prompt
คำสั่งออกจาก prompt ต่างๆ ในครั้งนี้ออกจาก psql กลับมาที่ postgres
\q
คำสั่งออกจาก prompt ต่างๆ ในครั้งนี้ออกจาก postgres กลับมาที่ root
exit
สรุป
PostgreSQL 16 มาพร้อมกับการปรับปรุงประสิทธิภาพที่ดีขึ้น โดยเฉพาะการทำ Parallel Query ที่เร็วขึ้น, การเพิ่มประสิทธิภาพในการทำ Logical Replication, การรองรับ SQL/JSON path language แบบสมบูรณ์ และการปรับปรุงระบบ WAL (Write-Ahead Logging) ให้มีประสิทธิภาพสูงขึ้น นอกจากนี้ยังมีฟีเจอร์ใหม่ที่น่าสนใจ เช่น การรองรับ SIMD instructions สำหรับการประมวลผลข้อมูล, การเพิ่มความสามารถในการทำ Table Partitioning, การปรับปรุงระบบ Authentication และความปลอดภัย รวมถึงการเพิ่มประสิทธิภาพในการจัดการ Vacuum process ทำให้เหมาะสำหรับการใช้งานในระดับองค์กรที่ต้องการประสิทธิภาพและความเสถียรสูง
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !
บทความที่เกี่ยวข้อง
- การสร้าง RDS for PostgreSQL และเชื่อมต่อจาก EC2 บน AWS
- การติดตั้ง PostgreSQL ใน Amazon Linux 2 บน EC2 และการใช้งานเบื้องต้น
- วิธีติดตั้ง Amazon Linux 2023 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
- PostgreSQL
- [เกร็ดความรู้] การติดตั้ง MySQL Server บน Amazon Linux 2023
- การติดตั้ง MariaDB บน Amazon Linux 2023