PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Ứng dụng khách Postgres bị khóa khi tạo bảng mới

Nếu khởi động lại postgres là một tùy chọn, thì điều đó rất có thể sẽ giải quyết được vấn đề và sẽ giúp bạn tiết kiệm thời gian đọc phần còn lại của câu trả lời này :-)

Kiểm tra pg_stat_activity xem, có thể có một số giao dịch khác đang chặn sự thay đổi giản đồ.

select * from pg_stat_activity 
where 
wait_event_type is NULL and xact_start is not NULL order by xact_start;

(pg_stat_activity được thay đổi một chút trong mỗi bản phát hành pg chính, hãy thử điều này cho các phiên bản cũ):

select * from pg_stat_activity 
where 
not waiting and xact_start is not NULL order by xact_start;

Hàng đầu tiên xuất hiện có lẽ là hàng gây ra vấn đề. Nó thường là "giao dịch nhàn rỗi" - điều này rất có thể giữ khóa và nếu đó là một giao dịch cũ, nó cũng có thể giết chết hiệu suất. Có thể lập trình viên đã quên đảm bảo kết thúc giao dịch bằng "commit" hoặc "rollback", hoặc có thể một số phiên db bị kẹt do sự cố mạng.

Để chấm dứt giao dịch với pid 1234, hãy sử dụng select pg_cancel_backend(1234); , nếu không thành công, hãy select pg_terminate_backend(1234) . Với quyền truy cập shell, các lệnh tương đương là kill -INT 1234kill 1234 . (lưu ý, kill -9 1234 là một ý tưởng thực sự tồi).

Ngoài ra còn có một chế độ xem pg_locks có thể cung cấp một số thông tin chi tiết, mặc dù có thể không dễ dàng để lấy bất kỳ thông tin hữu ích nào từ nó. Nếu granted là đúng, khóa được giữ, khi granted là false, điều đó có nghĩa là truy vấn đang chờ khóa. Dưới đây là một số gợi ý khác về cách trích xuất thông tin hữu ích từ pg_locks: http://wiki.postgresql. org / wiki / Lock_Moosystem

Nếu mọi thứ khác không thành công, thì có lẽ đã đến lúc tìm giải pháp đơn giản, khởi động lại máy chủ cơ sở dữ liệu đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bật PostgreSQL VERBOSITY trong kết nối db django?

  2. Nhập dữ liệu CSV vào ứng dụng Rails, sử dụng thứ gì đó khác sau đó là id liên kết

  3. Tham chiếu đến các biến phiên (\ set var ='value') từ PL / PGSQL

  4. Chức năng Postgres để xác thực địa chỉ email

  5. Đặt $$ trong chuỗi được trích dẫn bằng đô la trong PostgreSQL