- Published on
ติดตั้ง PostgreSQL ด้วย Docker
- Authors
- Name
- Somprasong Damyos
- @somprasongd
ติดตั้ง PostgreSQL ด้วย Docker
แนะนำวิธีการติดตั้ง PostgreSQL ด้วย Docker และวิธีการใช้งานเบื้องต้น
เนื้อหาในบทความนี้
- การติดตั้ง PostgreSQL
- การใช้งาน PostgreSQL Command Line เบื้องต้น
- การ Backup & Restore
- Database IDE
การติดตั้ง PostgreSQL
ในบทความนี้จะใช้วิธีการติดตั้งผ่าน Docker ซึ่งสามารถติดตั้งได้โดยใช้คำสั่งนี้
# Install PostgreSQL Version 15
$ docker run \
--name pg-15 \
-p 5432:5432 \
--restart always \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=pgpasswd \
-e POSTGRES_DB=my-db \
-v pg-15:/var/lib/postgresql/data \
-d postgres:15
# -e POSTGRES_USER=postgres คือ กำหนด username โดยใช้ว่า postgres
# -e POSTGRES_PASSWORD=pgpasswd คือ กำหนดรหัสผ่านสำหรับ username นี้ โดยตั้งว่า pgpasswd
# -e POSTGRES_DB=my-db คือ บอกให้ postgres สร้างฐานข้อมูลชื่อ my-db ให้เมื่อรัน server ขึ้นมา
# -v pg-15:/var/lib/postgresql/data คือ มีการ bind mount volumn ที่เก็บฐานข้อมูลไว้ออกว่าไว้ที่เครื่อง host
ถ้าต้องการหยุดการทำงานของ PostgreSQL Server ให้รันคำสั่งนี้
# Stop PostgreSQL Server
$ docker stop pg-15
ถ้าต้องการลบออกไปให้รันคำสั่งนี้
# Uninstall PostgreSQL Server & Remove All data
$ docker rm pg-15 && \
docker volume rm pg-15
เมื่อติดตั้งสำเร็จแล้ว สามารถเข้าไปใช้งาน PostgreSQL Server ใน container ได้ดังนี้
$ docker exec -it pg-15 bash
root@76d0962faf39:/#
การใช้งาน PostgreSQL Command Line เบื้องต้น
เราจะใช้ PostgreSQL Command Line หรือ psql ในการ access เข้าไปสั่งงาน PostgreSQL Server ซึ่งมีวิธีเข้าใช้งาน ดังนี้
# -U คือ ระบุว่าจะ login เข้าใช้งานด้วย user อะไร ในตัวอย่าง คือ ใช้ user postgres
root@76d0962faf39:/# psql -U postgres
psql (15.2 (Debian 15.2-1.pgdg110+1))
Type "help" for help.
postgres=#
คำสั่งสำหรับใช้งานเบื้องต้น
\h
→ แสดง Help\?
→ ดูว่ามี command อะไรให้ใช้งานบ้าง\q
→ ออกจาก psqlSELECT version();
→ แสดงว่ากำลังใช้งาน PostgreSQL Version อะไรอยู่SELECT current_database();
→ แสดงชื่อฐานข้อมูลที่เชื่อมต่ออยู่show config_file;
→ แสดงตำแหน่งที่อยู่ของไฟล์ postgresql.confpostgres=# show config_file; config_file ------------------------------------------ /var/lib/postgresql/data/postgresql.conf (1 row)
show hba_file;
→ แสดงตำแหน่งที่อยู่ของไฟล์ pg_hba.confpostgres=# show hba_file; hba_file -------------------------------------- /var/lib/postgresql/data/pg_hba.conf (1 row)
คำสั่งใช้งานบ่อย
CREATE DATABASE new_db WITH ENCODING ‘UTF8';
→ สร้างฐานข้อมูลใหม่postgres=# CREATE DATABASE new_db WITH ENCODING ‘UTF8’; CREATE DATABASE
\l
→ แสดรายชื่อฐานข้อมูลทั้งหมดpostgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges -----------+----------+----------+------------+------------+------------+-----------------+----------------------- my-db | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | new_db | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres + | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres + | | | | | | | postgres=CTc/postgres (5 rows)
\c [database name]
→ เชื่อมต่อไปยังฐานข้อมูลที่ระบุpostgres=# \c new_db You are now connected to database "new_db" as user "postgres". new_db=#
- สร้างตารางใหม่
new_db=# CREATE TABLE "users" ( "id" uuid PRIMARY KEY, "username" varchar UNIQUE NOT NULL, "password" varchar NOT NULL, "created_at" timestamp NOT NULL DEFAULT (now()) ); CREATE TABLE
\dt
→ แสดงรายชื่อตารางทั้งหมดnew_db=# \dt List of relations Schema | Name | Type | Owner --------+-------+-------+---------- public | users | table | postgres (1 row)
- ซึ่งสามารถรันคำสั่ง SQL ทั้ง
SELECT, INSERT, UPDATE, DELETE
ได้เลย โดยเมื่อจบแต่ละคำสั่งต้องปิดท้ายด้วย;
เสมอ
การ Backup & Restore
Backup
$ pg_dump -U postgres -E utf8 -Fc expend-db > expend-db.backup # -U postgres specifies the username to use when connecting to the database. In this case, it is set to "postgres". # -Fc specifies the format of the backup file to be the custom binary format created by pg_dump. # expend-db is the name of the database that you want to back up. # > expend-db.dump redirects the output of pg_dump to a file called "expend-db.dump".
Restore
$ pg_restore -U postgres -d expend-db expend-db.backup # -U postgres specifies the username to use when connecting to the database. In this case, it is set to "postgres". # -d expend-db specifies the name of the database that you want to restore. # expend-db.dump is the name of the backup file that you want to restore from.
Database IDE
Database IDE สำหรับ PostgreSQL นั้นมีหลายตัวมาก แต่ส่วนใหญ่ที่ใช้งานจะใช้อยู่ 2 ตัว คือ
pgAdmin ใช้งานผ่าน Browser สามารถติดตั้งโดยใช้ Docker ได้ดังนี้
$ docker run \ -p 5000:80 \ --restart always \ --link pg-15 \ -e PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10 \ -e PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True \ -e PGADMIN_DEFAULT_EMAIL=admin@domain.com \ -e PGADMIN_DEFAULT_PASSWORD=pgapasswd \ -v pga_data:/var/lib/pgadmin \ -d dpage/pgadmin4:6.20
เข้าใช้งานผ่าน http://localhost:5000 โดยการเชื่อมต่อสามารถกำหนดให้ host มีค่าเท่ากับ
pg-15
ซึ่งเป็นชื่อ container ของ PostgreSQL ServerDBeaver ตัวนี้ Universal Database Tool รองรับได้หลายระบบฐานข้อมูล สามารถโหลดมาติดตั้งที่เครื่องของตัวเองได้