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

các điểm ngắt trong nhật thực bằng cách sử dụng postgresql

Sự cố 1:ID người dùng không khớp

Đọc giữa các dòng, có vẻ như bạn đang cố gỡ lỗi một phiên bản PostgreSQL đang chạy dưới dạng postgres người dùng hoặc ID người dùng khác của riêng bạn. Do đó, bạn cố gắng sử dụng sudo .

Điều đó thật khó chịu, đặc biệt là khi sử dụng một IDE như Eclipse. Với gdb đơn giản bạn chỉ có thể sudo lệnh gdb đến uid mong muốn, ví dụ:sudo -u postgres -p 12345 để đính kèm vào pid 12345 đang chạy với tư cách người dùng postgres . Điều này sẽ không hoạt động với Eclipse. Trên thực tế, chạy nó với sudo có thể đã rời khỏi không gian làm việc của bạn với một số quyền đối với tệp bị rối; chạy:

sudo chown -R ravi /home/ravi/workspace/

để sửa quyền sở hữu tệp.

Nếu bạn muốn gỡ lỗi các quy trình trong các ID người dùng khác bằng Eclipse, bạn sẽ cần tìm cách làm cho Eclipse chạy gdb với sudo. Đ ừng chỉ cần chạy tất cả Eclipse với sudo .

Sự cố 2:Cố gắng chạy PostgreSQL dưới sự kiểm soát của Eclipse

Cái này:

gợi ý rằng bạn cũng đang cố gắng để Eclipse khởi động postgres trực tiếp. Điều đó rất hữu ích nếu bạn đang cố gắng gỡ lỗi postmaster , nhưng vì bạn đang nói về công cụ lập kế hoạch truy vấn nên rõ ràng bạn muốn gỡ lỗi một chương trình phụ trợ cụ thể. Việc khởi chạy quản trị viên bưu điện trong Eclipse là vô ích, bạn sẽ bị dính vào quy trình sai.

Tôi nghĩ bạn có thể cần đọc tài liệu về nội bộ của PostgreSQL:

Làm đúng

Đây là những gì bạn cần làm - phác thảo sơ bộ, vì tôi chỉ sử dụng Eclipse để phát triển Java và thực hiện phát triển C của tôi với vim và gdb:

  • Biên dịch một bản dựng gỡ lỗi của PostgreSQL (được biên dịch bằng ./configure --enable-debug và tốt hơn nữa là CFLAGS="-ggdb -Og -fno-omit-frame-pointer" ). Chỉ định một --prefix trong homedir của bạn, chẳng hạn như --prefix=$HOME/postgres-debug

  • Đặt bin của bản dựng gỡ lỗi của bạn thư mục đầu tiên trên PATH của bạn , ví dụ. export PATH=$HOME/postgres-debug/bin:$PATH

  • initdb -U postgres -D $HOME/postgres-debug-data một phiên bản mới của PostgreSQL từ bản dựng gỡ lỗi của bạn

  • Bắt đầu phiên bản mới với PGPORT=5599 pg_ctl -D $HOME/postgres-debug-data -l $HOME/postgres-debug-data.log -w start

  • Kết nối với PGPORT=5599 psql postgres

  • Thực hiện bất kỳ thiết lập nào bạn cần làm

  • Nhận ID quy trình phụ trợ với SELECT pg_backend_pid() trong một psql phiên họp. Để phiên đó mở; đó là cái bạn sẽ gỡ lỗi.

  • Đính kèm trình gỡ lỗi của Eclipse vào ID quy trình đó, sử dụng dự án Eclipse có chứa mã nguồn mở rộng PostgreSQL mà bạn đang gỡ lỗi. Đảm bảo rằng Eclipse được định cấu hình để nó cũng có thể tìm thấy mã nguồn PostgreSQL mà bạn đã biên dịch (không biết làm thế nào để làm điều đó, hãy xem hướng dẫn).

  • Đặt bất kỳ điểm ngắt mong muốn nào và tiếp tục thực thi

  • Trong psql , hãy làm bất cứ điều gì bạn cần làm để tiện ích mở rộng của bạn chạy và đạt đến điểm dừng

  • Khi quá trình thực thi tạm dừng tại điểm ngắt trong Eclipse, hãy gỡ lỗi như mong muốn.

Những hiểu lầm cơ bản?

Ngoài ra, trong trường hợp bạn thực sự nhầm lẫn về cách tất cả điều này hoạt động:PostgreSQL là một ứng dụng máy khách / máy chủ. Nếu bạn đang cố gỡ lỗi một chương trình khách sử dụng libpq hoặc odbc và mong đợi một điểm ngắt để kích hoạt trong một số mã mở rộng phụ trợ PostgreSQL, điều đó sẽ không xảy ra. Ứng dụng khách giao tiếp với PostgreSQL qua ổ cắm TCP / IP. Đó là một chương trình riêng biệt. gdb không thể đặt các điểm ngắt trong máy chủ PostgreSQL khi nó được kết nối với máy khách, vì chúng là các chương trình riêng biệt. Nếu bạn muốn gỡ lỗi máy chủ, bạn phải đính kèm gdb vào máy chủ. PostgreSQL sử dụng một quy trình cho mỗi kết nối, vì vậy bạn phải đính kèm gdb với đúng quy trình máy chủ. Đó là lý do tại sao tôi nói sử dụng SELECT pg_backend_pid() ở trên và đính kèm với ID quy trình.

Xem tài liệu nội bộ được liên kết ở trên và:



  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 để đặt lại chuỗi khóa chính của postgres khi nó không đồng bộ?

  2. Xác thực các bản sao lưu PostgreSQL của bạn trên Docker

  3. Triển khai dự án Django trên web hài lòng

  4. Sao chép cấu trúc bảng vào bảng mới

  5. Trích xuất dữ liệu từ PostgreSQL DB mà không sử dụng pg_dump