Skip to content

Postgres node common issues#

ด้านล่างเป็นข้อผิดพลาดหรือปัญหาทั่วไปกับ Postgres node และขั้นตอนในการแก้ไขหรือวิเคราะห์ปัญหา

Dynamically populate SQL IN groups with parameters#

ใน Postgres คุณสามารถใช้ SQL IN comparison construct เพื่อเปรียบเทียบกลุ่มของค่า:

1
SELECT color, shirt_size FROM shirts WHERE shirt_size IN ('small', 'medium', 'large');

ถึงแม้จะใช้ n8n expressions เพื่อเติมค่าลงในกลุ่ม IN แบบไดนามิกได้ การผสานกับ query parameters จะช่วยเพิ่มความปลอดภัยด้วยการ sanitize ข้อมูลให้โดยอัตโนมัติ

เพื่อสร้าง IN group query พร้อม query parameters:

  1. ตั้ง Operation เป็น Execute Query
  2. ใน Options ให้เลือก Query Parameters
  3. ใช้ expression เพื่อดึงอาร์เรย์จาก input data เช่น {{ $json.input_shirt_sizes }}
  4. ในพารามิเตอร์ Query ให้เว้นวงเล็บ IN ไว้เปล่า เช่น:
    1
    SELECT color, shirt_size FROM shirts WHERE shirt_size IN ();
    
  5. ในวงเล็บ IN ให้ใช้ expression สร้าง placeholders ($1, $2, $3…) ตามจำนวนไอเท็มในอาร์เรย์ โดยเพิ่ม index แต่ละตัวขึ้นหนึ่งเพราะ placeholder เริ่มนับที่ 1:
    1
    SELECT color, shirt_size FROM shirts WHERE shirt_size IN ({{ $json.input_shirt_sizes.map((i, pos) => "$" + (pos+1)).join(', ') }});
    

ด้วยเทคนิคนี้ n8n จะสร้าง prepared statement placeholders ตามจำนวนค่าของอาร์เรย์ให้โดยอัตโนมัติ

Working with timestamps and time zones#

เพื่อหลีกเลี่ยงปัญหาเกี่ยวกับ timestamp และ time zone ระหว่าง n8n กับ Postgres ให้ทำตามเคล็ดลับเหล่านี้:

  • Use UTC when storing and passing dates: ควรใช้ UTC ในการเก็บและส่งวันที่เพื่อป้องกันความสับสนจากการแปลง time zone ระหว่างระบบ
  • Set the execution timezone: กำหนด global timezone ใน n8n ผ่าน environment variables (self-hosted) หรือผ่าน settings (n8n Cloud) และยังสามารถตั้ง workflow-specific timezone ใน workflow settings
  • Use ISO 8601 format: รูปแบบ ISO 8601 จะเก็บวัน เดือน ปี ชั่วโมง นาที และวินาทีเป็นสตริง มาตรฐาน n8n ส่งวันที่ข้ามโหนดในรูปแบบสตริงใช้ Luxon parse หากต้องการ cast เป็น ISO 8601 ให้ใช้ Date & Time node แล้วตั้ง custom format เป็น yyyy-MM-dd'T'HH:mm:ss