บทความนี้อธิบายวิธีการเปลี่ยนแปลงฟิลด์ “สร้างโดย” ของชุดข้อมูลในระบบ CKAN Open-D ที่รันอยู่บน Docker ซึ่งมีประโยชน์ในกรณีที่ท่านต้องการส่งมอบสิทธิ์แก้ไขชุดข้อมูลหรือจัดระเบียบรายการข้อมูล

หมายเหตุ: ก่อนเริ่มดำเนินการ ควรสำรองข้อมูล (backup) ก่อนเสมอ เพื่อป้องกันความผิดพลาดที่อาจเกิดขึ้น
ขั้นตอนที่ 1: เชื่อมต่อเครื่องแม่ข่ายผ่าน SSH
เปิด Terminal แล้วเชื่อมต่อไปยังเครื่องแม่ข่ายที่ติดตั้ง CKAN ด้วยคำสั่ง:
ssh [email protected]
หมายเหตุ: เปลี่ยน user
และ ckan.example.com
ให้เป็นค่าที่ถูกต้อง
ขั้นตอนที่ 2: ตรวจสอบรายการ Docker Container
หลังจากเข้าสู่เครื่องแม่ข่ายแล้ว ให้ตรวจสอบ container ที่ทำงานอยู่ด้วยคำสั่ง:
docker ps
ตัวอย่างผลลัพธ์:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<REDACTED> thepaeth/ckan-thai_gdc:ckan-2.9-xloader "/srv/app/start_ckan…" 8 hours ago Up 8 hours (healthy) 5000/tcp ckan1
<REDACTED> ckan-db "docker-entrypoint.s…" 4 months ago Up 4 months 5432/tcp db-1
<REDACTED> ckan-solr "docker-entrypoint.s…" 4 months ago Up 4 months 8983/tcp solr1
<REDACTED> redis:alpine "docker-entrypoint.s…" 8 months ago Up 4 months 6379/tcp redis1
<REDACTED> jwilder/nginx-proxy:alpine "/app/docker-entrypo…" 8 months ago Up 4 months 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp proxy1
<REDACTED> jrcs/letsencrypt-nginx-proxy-companion:latest "/bin/bash /app/entr…" 8 months ago Up 4 months letsencrypt1
จากผลลัพธ์ ให้จดจำชื่อ container ที่สำคัญดังนี้:
- Container ฐานข้อมูล (ckan-db): เช่น
db-1
- Container CKAN (ที่ใช้ image
thepaeth/ckan-thai_gdc:ckan-2.9-xloader
): เช่นckan1
ขั้นตอนที่ 3: สำรองข้อมูลฐานข้อมูล
3.1 สำรองฐานข้อมูลภายใน Container
ใช้คำสั่ง pg_dump
ภายใน container ที่ชื่อ db-1
เพื่อสร้างไฟล์สำรอง:
docker exec db-1 sh -c "pg_dump -U ckan ckan > /root/db-backup.sql"
3.2 คัดลอกไฟล์สำรองออกจาก Container
นำไฟล์สำรองจาก container มาไว้บนเครื่องแม่ข่าย:
docker cp db-1:/root/db-backup.sql .
ตัวอย่างผลลัพธ์:
Successfully copied 100MB to /home/user/.
ขั้นตอนที่ 4: เข้าสู่ระบบจัดการฐานข้อมูล
เปิดโปรแกรม psql ใน container db-1
:
docker exec -it db-1 sh -c "psql -U ckan"
เมื่อเปิดโปรแกรม psql แล้ว ท่านจะพบหน้า prompt ดังนี้:
psql (REDACTED_VERSION (REDACTED_DIST))
Type "help" for help.
ckan=#
หากต้องการดูผลลัพธ์ในรูปแบบที่อ่านง่ายขึ้น สามารถเปิด expanded display โดยใช้คำสั่ง:
ckan=# \x
จะได้ผลลัพธ์ดังนี้:
Expanded display is on.
ขั้นตอนที่ 5: แก้ไขฟิลด์ “สร้างโดย” ของชุดข้อมูล
5.1 ค้นหาชุดข้อมูลที่ต้องการแก้ไข
ชุดข้อมูลแต่ละชุดจะมี name
ซึ่งมักปรากฏใน URL เช่น หาก URL เป็น: https://data.example.com/dataset/hotspot-modis ชื่อชุดข้อมูลจะเป็น hotspot-modis
ให้ค้นหาข้อมูลชุดนี้ในฐานข้อมูล:
ckan=# select * from package where name = 'hotspot-modis';
ตัวอย่างผลลัพธ์:
-[ RECORD 1 ]-----+-------------------------------------
id | 76c9817e-18eb-4ee0-bd69-b1fffcd511eb
name | hotspot-modis
title | ข้อมูลจุดความร้อนจากดาวเทียมระบบ MODIS
version |
url | https://firms.modaps.eosdis.nasa.gov
notes | ระบบฐานข้อมูลจุดความร้อนจากภาพถ่ายดาวเทียม
author |
author_email |
maintainer | ส่วนควบคุมไฟป่า
maintainer_email | REDACTED_EMAIL
state | active
license_id | Open Data Common
type | dataset
owner_org | e1c86d67-da9c-4baf-a800-b7e905f340ab
private | f
metadata_modified | 2025-02-06 17:00:24.774804
creator_user_id | 3e0b5589-5c04-4f0e-bf92-d71a300aaaeb
metadata_created | 2022-01-27 12:38:48.626984
จดจำค่า id
ของชุดข้อมูล (ในตัวอย่างคือ 76c9817e-18eb-4ee0-bd69-b1fffcd511eb
)
5.2 ค้นหาบัญชีผู้ใช้ที่ต้องการเป็นเจ้าของชุดข้อมูล
สืบค้นชื่อบัญชีที่ต้องการให้เป็นเจ้าของชุดข้อมูล โดยดูชื่อได้จาก URL ของผู้ใช้ เช่น หาก URL เป็น https://data.example.com/user/pitakprai ชื่อบัญชีจะเป็น pitakprai
ให้ค้นหาข้อมูลของผู้ใช้:
ckan=# select id,name,fullname,email from "user" where name = 'pitakprai';
ตัวอย่างผลลัพธ์:
-[ RECORD 1 ]----------------------------------
id | e83d9bae-1ea5-4c53-9559-d3ce19ace3df
name | pitakprai
fullname | สำนักป้องกันรักษาป่าและควบคุมไฟป่า
email | REDACTED_EMAIL
จดจำค่า id
ของผู้ใช้ (ในตัวอย่างคือ e83d9bae-1ea5-4c53-9559-d3ce19ace3df
)
5.3 อัปเดตฟิลด์ creator_user_id ของชุดข้อมูล
แทนที่ค่าในคอลัมน์ creator_user_id
ด้วย id
ของผู้ใช้ที่ต้องการ โดยใช้คำสั่ง:
ckan=# update package set creator_user_id = 'e83d9bae-1ea5-4c53-9559-d3ce19ace3df' where id = '76c9817e-18eb-4ee0-bd69-b1fffcd511eb';
จะได้ผลลัพธ์ดังนี้:
UPDATE 1
หมายเหตุ: แทนที่ค่า
e83d9bae-1ea5-4c53-9559-d3ce19ace3df
(ผู้ใช้) และ76c9817e-18eb-4ee0-bd69-b1fffcd511eb
(ชุดข้อมูล) ด้วยข้อมูลที่ถูกต้อง
5.4 ตรวจสอบการเปลี่ยนแปลง
เรียกดูรายละเอียดของชุดข้อมูลอีกครั้งเพื่อให้แน่ใจว่าการอัปเดตสำเร็จ:
ckan=# select * from package where name = 'hotspot-modis';
ผลลัพธ์ควรแสดงฟิลด์ creator_user_id
ที่เป็นค่าใหม่:
-[ RECORD 1 ]-----+-------------------------------------
id | 76c9817e-18eb-4ee0-bd69-b1fffcd511eb
name | hotspot-modis
title | ข้อมูลจุดความร้อนจากดาวเทียมระบบ MODIS
version |
url | https://firms.modaps.eosdis.nasa.gov
notes | ระบบฐานข้อมูลจุดความร้อนจากภาพถ่ายดาวเทียม
author |
author_email |
maintainer | ส่วนควบคุมไฟป่า
maintainer_email | REDACTED_EMAIL
state | active
license_id | Open Data Common
type | dataset
owner_org | e1c86d67-da9c-4baf-a800-b7e905f340ab
private | f
metadata_modified | 2025-02-06 17:00:24.774804
creator_user_id | e83d9bae-1ea5-4c53-9559-d3ce19ace3df
metadata_created | 2022-01-27 12:38:48.626984
หลังจากตรวจสอบแล้ว ให้ใช้คำสั่ง exit
เพื่อออกจาก PostgreSQL
ckan=# exit
ขั้นตอนที่ 6: ล้างแคชของ Solr
แม้ว่าจะอัปเดตข้อมูลในฐานข้อมูลแล้ว แต่ข้อมูลที่แสดงในหน้าเว็บของ CKAN อาจยังคงเป็นข้อมูลเก่าอยู่ เนื่องจากแคชของ Solr ดังนั้นจึงต้องล้างแคชและสร้าง index ใหม่ โดยใช้คำสั่ง:
docker exec ckan1 sh -c 'ckan -c /srv/app/ckan.ini search-index rebuild'
ตัวอย่างผลลัพธ์:
2025-02-07 14:24:55,164 INFO [ckan.cli] Using configuration file /srv/app/ckan.ini
2025-02-07 14:24:55,164 INFO [ckan.config.environment] Loading static files from public
2025-02-07 14:24:55,227 INFO [ckan.config.environment] Loading templates from /srv/app/src/ckan/ckan/templates
2025-02-07 14:24:56,423 INFO [ckan.config.environment] Loading templates from /srv/app/src/ckan/ckan/templates
2025-02-07 14:24:56,861 INFO [ckan.lib.search] Rebuilding search index…
2025-02-07 14:24:56,868 INFO [ckan.lib.search] Rebuilding the whole index…
Indexing dataset 87/872025-02-07 14:25:03,470 INFO [ckan.lib.search] Finished rebuilding search index.
2025-02-07 14:25:03,590 INFO [ckan.lib.search] Commited pending changes on the search index
หลังจากขั้นตอนนี้ เมื่อเปิดดูชุดข้อมูลผ่านหน้าเว็บ ฟิลด์ “สร้างโดย” จะถูกอัปเดตตามการเปลี่ยนแปลงในฐานข้อมูล
สรุปขั้นตอนการแก้ไขฟิลด์ “สร้างโดย”
- เชื่อมต่อเครื่องแม่ข่าย ผ่าน SSH
- ตรวจสอบรายชื่อ Docker container ที่สำคัญ (เช่น
ckan1
และdb-1
) - สำรองข้อมูลฐานข้อมูล ด้วยคำสั่ง
pg_dump
และdocker cp
- เข้าสู่ PostgreSQL ภายใน container และเปิด expanded display (หากจำเป็น)
- ค้นหาชุดข้อมูล ที่ต้องการแก้ไขและจดจำ
id
ของชุดข้อมูล - ค้นหาบัญชีผู้ใช้ ที่ต้องการเป็นเจ้าของชุดข้อมูลและจดจำ
id
ของผู้ใช้ - อัปเดตฟิลด์
creator_user_id
ด้วยคำสั่งupdate
- ตรวจสอบผลการอัปเดต และออกจาก PostgreSQL
- ล้างแคชของ Solr ด้วยคำสั่ง
search-index rebuild
ขอบคุณครับ