การแก้ไขฟิลด์ “สร้างโดย” ของชุดข้อมูลใน CKAN Open-D (Docker) 1


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

โลโก้ CKAN Open-D

หมายเหตุ: ก่อนเริ่มดำเนินการ ควรสำรองข้อมูล (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

หลังจากขั้นตอนนี้ เมื่อเปิดดูชุดข้อมูลผ่านหน้าเว็บ ฟิลด์ “สร้างโดย” จะถูกอัปเดตตามการเปลี่ยนแปลงในฐานข้อมูล

สรุปขั้นตอนการแก้ไขฟิลด์ “สร้างโดย”

  1. เชื่อมต่อเครื่องแม่ข่าย ผ่าน SSH
  2. ตรวจสอบรายชื่อ Docker container ที่สำคัญ (เช่น ckan1 และ db-1)
  3. สำรองข้อมูลฐานข้อมูล ด้วยคำสั่ง pg_dump และ docker cp
  4. เข้าสู่ PostgreSQL ภายใน container และเปิด expanded display (หากจำเป็น)
  5. ค้นหาชุดข้อมูล ที่ต้องการแก้ไขและจดจำ id ของชุดข้อมูล
  6. ค้นหาบัญชีผู้ใช้ ที่ต้องการเป็นเจ้าของชุดข้อมูลและจดจำ id ของผู้ใช้
  7. อัปเดตฟิลด์ creator_user_id ด้วยคำสั่ง update
  8. ตรวจสอบผลการอัปเดต และออกจาก PostgreSQL
  9. ล้างแคชของ Solr ด้วยคำสั่ง search-index rebuild

แสดงความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

หนึ่งความคิดเห็นบน “การแก้ไขฟิลด์ “สร้างโดย” ของชุดข้อมูลใน CKAN Open-D (Docker)