นี่คือคำตอบทั่วไปของ Postgres และไม่เฉพาะเจาะจงสำหรับ heroku
(คำตอบง่ายๆโง่ ๆ สำหรับคำถามนี้อาจเป็น ... เพียงรีสตาร์ท postgresql สมมติว่าไม่เป็นที่ต้องการหรือไม่ใช่ตัวเลือก ... )
ค้นหา PID โดยเรียกใช้ sql นี้:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(คำค้นหาอาจต้องการการแก้ไขโดยขึ้นอยู่กับเวอร์ชันของ postgres - ในที่สุดเพียงเลือก * จาก pg_stat_activity) คุณจะพบ pid ในคอลัมน์แรก (ซ้าย) และแถวแรก (บนสุด) น่าจะเป็นข้อความค้นหาที่คุณต้องการยุติ ฉันจะถือว่า pid อยู่ที่ 1234 ด้านล่าง
คุณสามารถยกเลิกการสืบค้นผ่าน SQL (เช่นไม่มีการเข้าถึงเชลล์) ตราบใดที่เป็นของคุณหรือคุณมีการเข้าถึงของผู้ใช้ขั้นสูง:
select pg_cancel_backend(1234);
นั่นเป็นคำขอที่ "เป็นมิตร" เพื่อยกเลิกแบบสอบถาม 1234 และด้วยความโชคดีมันจะหายไปหลังจากนั้นสักครู่ ในที่สุดก็มีประสิทธิภาพมากขึ้น:
select pg_terminate_backend(1234);
หากคุณมีสิทธิ์เข้าถึงเชลล์และสิทธิ์รูทหรือ postgres คุณสามารถทำได้จากเชลล์ ในการ "ยกเลิก" สามารถทำได้:
kill -INT 1234
และเพื่อ "ยุติ" เพียงแค่:
kill 1234
อย่า:
kill -9 1234
... ซึ่งมักจะส่งผลให้เซิร์ฟเวอร์ postgres ทั้งหมดดับลงจากนั้นคุณอาจรีสตาร์ท postgres ได้เช่นกัน Postgres ค่อนข้างมีประสิทธิภาพดังนั้นข้อมูลจะไม่เสียหาย แต่ฉันไม่แนะนำให้ใช้ "kill -9" ไม่ว่าในกรณีใด ๆ :-)
"ไม่ได้ใช้งานในการทำธุรกรรม" เป็นเวลานานมักหมายความว่าธุรกรรมนั้นไม่ได้ถูกยุติลงด้วยการ "กระทำ" หรือ "ย้อนกลับ" ซึ่งหมายความว่าแอปพลิเคชันมีข้อบกพร่องหรือไม่ได้รับการออกแบบมาอย่างเหมาะสมเพื่อทำงานกับฐานข้อมูลธุรกรรม ควรหลีกเลี่ยง "ไม่ได้ใช้งานในการทำธุรกรรม" เป็นเวลานานเนื่องจากอาจทำให้เกิดปัญหาด้านประสิทธิภาพที่สำคัญได้