การติดตั้ง PostgreSQL ใน Amazon Linux 2023 บน EC2 และการใช้งานเบื้องต้น

การติดตั้ง PostgreSQL ใน Amazon Linux 2023 บน EC2 และการใช้งานเบื้องต้น

PostgreSQL เป็นฐานข้อมูลเชิงสัมพันธ์โอเพ่นซอร์สที่ยอดนิยม สามารถนำไปใช้งานได้ฟรี ซึ่งผมจะนำมาใช้งานร่วมกับ EC2 Instance โดยติดตั้ง PostgreSQL ใน Amazon Linux 2023 ด้วยการ Run command ซึ่งจะมาอธิบายขั้นตอนในบทความนี้

POP จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้จะมาแนะนำการติดตั้ง PostgreSQL 16 ใน Amazon Linux 2023 และการใช้งานเบื้องต้น โดยการ Run Command ตามขั้นตอนในบทความนี้

สิ่งที่ต้องมี

※มี EC2 Instance และเชื่อมต่อกับ Instance แล้ว

ดูตัวอย่างได้ที่ลิงก์บทความด้านล่างนี้
https://dev.classmethod.jp/articles/how-to-install-amazon-linux-2023-on-ec2/

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)

TERMINAL (PuTTY)
[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)

TERMINAL (PuTTY)
[root@ip-xx-xx-xx-xx ~]# su - postgres
[postgres@ip-xx-xx-xx-xx ~]$

คำสั่งเข้าใช้งาน psql

psql

ถ้าเข้าใช้งานได้แล้วจะเปลี่ยนเป็น postgres=#
Output (example)

TERMINAL (PuTTY)
[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)

TERMINAL (PuTTY)
postgres=# alter role postgres with password 'P@ssW0rd';
ALTER ROLE
postgres=#

กลับมาที่ root

คำสั่งออกจาก psql

\q

เมื่อออกจาก postgres แล้วจะเปลี่ยนเป็น [postgres@ip-xx-xx-xx-xx ~]$
Output (example)

TERMINAL (PuTTY)
postgres=# \q
[postgres@ip-xx-xx-xx-xx ~]$

คำสั่งออกจาก prompt ต่างๆ ในครั้งนี้ออกจาก postgres กลับมาที่ root

exit

เมื่อออกจาก postgres แล้วจะเปลี่ยนเป็น [root@ip-xxx-xx-xx-xxx ~]#
Output (example)

TERMINAL (PuTTY)
[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)

TERMINAL (PuTTY)
"ไม่ได้แสดงส่วนบน"

# 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

TERMINAL (PuTTY)
[root@ip-xx-xx-xx-xx ~]# psql -h localhost -U postgres
Password for user postgres: [your-password]    # ขณะพิมพ์ Password ตัวอักษรจะไม่แสดงให้เห็น

หาก Login psql ได้แล้ว จะแสดงหน้าจอแบบนี้ แล้วจะเปลี่ยนเป็น postgres=#
Output (example) 2

TERMINAL (PuTTY)
[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)

TERMINAL (PuTTY)
postgres=# CREATE DATABASE tinnakorn;
CREATE DATABASE
postgres=#

คำสั่งแสดงรายการ database

\l

จะเห็นว่ามีชื่อ Database tinnakorn แสดงขึ้นมา
Output (example)

TERMINAL (PuTTY)
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)

TERMINAL (PuTTY)
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)

TERMINAL (PuTTY)
tinnakorn=# create table test(id int, message varchar(255));
CREATE TABLE
tinnakorn=#

คำสั่งแสดงรายการ Table

\dt

จะเห็นว่ามีชื่อ Table test แสดงขึ้นมา
Output (example)

TERMINAL (PuTTY)
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)

TERMINAL (PuTTY)
tinnakorn=# insert into test(id, message) values(1, 'test1');
INSERT 0 1
tinnakorn=#

ดึงข้อมูลจาก Table

คำสั่งดึงข้อมูลจาก Table ทั้งหมดเพื่อแสดงข้อมูล

select * from test;

Output (example)

TERMINAL (PuTTY)
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) ครับ !

บทความที่เกี่ยวข้อง

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.