PlusMagi's Blog By Pitt Phunsanit Backend,Cloud Computing,Database Node.js: cannot be loaded because running scripts is disabled on this system

Node.js: cannot be loaded because running scripts is disabled on this system

การพัฒนาแอปพลิเคชันที่ใช้ Node.js ร่วมกับ PostgreSQL เป็นการผสมผสานที่ทรงพลัง แต่บ่อยครั้งที่นักพัฒนามักพบกับข้อผิดพลาดที่ดูเหมือนไม่เกี่ยวข้องกับฐานข้อมูลโดยตรง นั่นคือข้อความแจ้งว่า "cannot be loaded because running scripts is disabled on this system" ข้อผิดพลาดนี้ไม่ได้เกิดจาก PostgreSQL โดยตรง แต่เกิดจากนโยบายความปลอดภัยของระบบปฏิบัติการ Windows (PowerShell) ที่ป้องกันการรันสคริปต์ภายนอก

หากคุณกำลังใช้เครื่องมือที่ต้องเรียกใช้ Node.js เช่น TypeScript Compiler (tsc) หรือ ORM ที่ใช้ Node.js ในการเตรียมโค้ดเพื่อเชื่อมต่อกับ PostgreSQL การเจอ Error นี้หมายความว่านโยบายการรันสคริปต์ของคุณถูกจำกัดไว้ คุณจำเป็นต้องปรับเปลี่ยนนโยบายนี้เพื่อให้เครื่องมือเหล่านั้นทำงานได้อย่างถูกต้อง

สาเหตุของข้อผิดพลาด Execution Policy

โดยปกติแล้ว PowerShell มีคุณสมบัติที่เรียกว่า Execution Policy ซึ่งเป็นกลไกความปลอดภัยที่กำหนดว่าผู้ใช้สามารถรันสคริปต์ (เช่น .ps1) ได้ในระดับใด หากนโยบายถูกตั้งค่าไว้ที่ Restricted ระบบจะไม่ยอมให้รันสคริปต์ใด ๆ เลย ทำให้เมื่อ Node.js หรือเครื่องมือที่เกี่ยวข้องพยายามรันสคริปต์เพื่อตรวจสอบหรือคอมไพล์โค้ด ก็จะเกิดข้อผิดพลาดดังกล่าว

ขั้นตอนการแก้ไขปัญหา Execution Policy

การแก้ไขปัญหานี้ต้องทำผ่าน PowerShell ด้วยสิทธิ์ผู้ดูแลระบบ (Run as Administrator) โดยการเปลี่ยนนโยบายการรันสคริปต์ให้ผ่อนปรนขึ้น การตั้งค่าที่แนะนำคือ RemoteSigned ซึ่งอนุญาตให้รันสคริปต์ที่คุณสร้างขึ้นเองได้ แต่ยังคงต้องการการตรวจสอบลายเซ็นสำหรับสคริปต์ที่ดาวน์โหลดมาจากภายนอก

เปิด PowerShell ในฐานะ Administrator แล้วรันคำสั่งต่อไปนี้:

SQL

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

หลังจากรันคำสั่งนี้แล้ว ให้ลองรันคำสั่ง Node.js หรือ TypeScript ที่เคยล้มเหลวอีกครั้ง หากปัญหายังคงอยู่ คุณอาจต้องตรวจสอบว่ามีการตั้งค่า Scope ที่เหมาะสมหรือไม่ (เช่น การใช้ CurrentUser แทน LocalMachine หากต้องการจำกัดขอบเขตการเปลี่ยนแปลง)

การยืนยันการเชื่อมต่อ PostgreSQL หลังการแก้ไข

เมื่อคุณแก้ไขปัญหาด้านสภาพแวดล้อม (Environment) ของ Node.js แล้ว ขั้นตอนต่อไปคือการยืนยันว่าแอปพลิเคชันของคุณสามารถเชื่อมต่อกับ PostgreSQL ได้อย่างถูกต้อง โดยการทดสอบการรันคำสั่ง SQL พื้นฐานเพื่อตรวจสอบสิทธิ์และสถานะของฐานข้อมูล

ตัวอย่างการตรวจสอบเวอร์ชัน PostgreSQL:

SQL

SELECT version();

หรือการตรวจสอบผู้ใช้และสิทธิ์ที่กำลังใช้งาน:

SQL

SELECT current_user, current_database(), current_schema();

การดำเนินการเหล่านี้จะช่วยยืนยันว่าแม้ว่าคุณจะแก้ไขปัญหาด้านสคริปต์ภายนอกแล้ว การเชื่อมต่อกับ PostgreSQL ก็ยังคงเสถียรและมีสิทธิ์ที่จำเป็นในการทำงาน

บทสรุป

ข้อผิดพลาด "running scripts is disabled" เป็นปัญหาด้านความปลอดภัยของระบบปฏิบัติการ ไม่ใช่ข้อบกพร่องของ PostgreSQL โดยการใช้คำสั่ง Set-ExecutionPolicy RemoteSigned ในสิทธิ์ Administrator จะช่วยเปิดใช้งานสิทธิ์การรันสคริปต์ที่จำเป็นสำหรับเครื่องมือ Node.js ของคุณ ทำให้การพัฒนาแอปพลิเคชันที่ผสานรวม Node.js และ PostgreSQL เป็นไปอย่างราบรื่นและสมบูรณ์