Đây là câu trả lời chung và không dành riêng cho heroku. Nói chung, việc hủy truy vấn có thể yêu cầu người dùng có quyền truy cập superuser hoặc máy chủ postgres hoặc cơ sở dữ liệu postgres - có vẻ như người dùng thông thường không thể giết quá trình truy vấn của riêng mình mà không hỏi DBA hoặc sysadmin của bạn để được trợ giúp
Tìm các PID bằng cách chạy sql này:
SELECT procpid,* from pg_stat_activity
WHERE current_query<>'<IDLE>' ORDER BY xact_start;
bạn sẽ tìm thấy procpid trong (trái) cột đầu tiên, và là người đầu tiên (trên cùng) hàng có khả năng là các truy vấn mà bạn' d muốn chấm dứt. Tôi sẽ giả định pid là 1234 dưới đây.
Bạn có thể hủy các truy vấn SQL thông qua (tức là không được tiếp cận vỏ, nhưng có thể bạn cần truy cập superuser cơ sở dữ liệu):
select pg_cancel_backend(1234);
Đây là cách "mềm" ... truy vấn sẽ không biến mất ngay lập tức. Nếu bạn đang ở trong một vội vàng, hãy thử điều này:
select pg_terminate_backend(1234);
Nếu bạn có quyền truy cập shell bạn cũng có thể làm điều đó từ vỏ:
kill -INT 1234
Nếu điều đó không giúp, sử dụng:
kill 1234
KHÔNG:
kill -9 1234
... mà thường sẽ dẫn đến toàn bộ máy chủ postgres đi xuống trong ngọn lửa, sau đó bạn cũng có thể khởi động lại postgres. Postgres là khá mạnh mẽ, vì vậy dữ liệu sẽ không bị hỏng, nhưng tôi khuyên bạn nên chống lại việc sử dụng "kill -9" trong bất kỳ trường hợp ;-)
"nhàn rỗi trong giao dịch" có nghĩa là giao dịch không chấm dứt với "cam kết" hoặc "rollback", nghĩa là ứng dụng bị lỗi hoặc không được thiết kế đúng cách để làm việc với cơ sở dữ liệu giao dịch. Bạn nên tránh sử dụng "nhàn rỗi trong giao dịch" lâu dài vì nó cũng có thể gây ra các sự cố hiệu suất lớn.
Có lẽ câu hỏi cần được viết lại để "làm thế nào để chấm dứt truy vấn của riêng tôi khi có không phải truy cập root vào máy chủ postgres cũng không truy cập superuser cơ sở dữ liệu". Nó có vẻ như là một câu hỏi rất hay ... và tôi không biết câu trả lời. – tobixen