PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

breakpoints di Eclipse menggunakan postgresql

Masalah 1:ID Pengguna tidak cocok

Membaca yang tersirat, sepertinya Anda mencoba men-debug instance PostgreSQL yang berjalan sebagai postgres pengguna, atau ID pengguna yang berbeda dengan milik Anda. Karenanya upaya Anda untuk menggunakan sudo .

Itu menyakitkan, terutama saat menggunakan IDE seperti Eclipse. Dengan gdb biasa Anda cukup sudo perintah gdb ke uid yang diinginkan, mis. sudo -u postgres -p 12345 untuk melampirkan ke pid 12345 berjalan sebagai pengguna postgres . Ini tidak akan bekerja dengan Eclipse. Bahkan, menjalankannya dengan sudo mungkin meninggalkan ruang kerja Anda dengan beberapa izin file yang kacau; jalankan:

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

untuk memperbaiki kepemilikan file.

Jika Anda ingin men-debug proses di bawah ID pengguna lain dengan Eclipse, Anda harus mengetahui cara membuat Eclipse menjalankan gdb dengan sudo. Jangan jangan jalankan saja semua Eclipse dengan sudo .

Masalah 2:Mencoba menjalankan PostgreSQL di bawah kendali Eclipse

Ini:

menyarankan bahwa Anda juga mencoba untuk membiarkan Eclipse memulai postgres secara langsung. Itu sangat berguna jika Anda mencoba men-debug postmaster , tetapi karena Anda berbicara tentang perencana kueri, jelas Anda ingin men-debug backend tertentu. Meluncurkan postmaster di bawah Eclipse tidak ada gunanya untuk itu, Anda akan dilampirkan ke proses yang salah.

Saya pikir Anda mungkin perlu membaca dokumentasi di internal PostgreSQL:

Melakukannya dengan benar

Inilah yang perlu Anda lakukan - garis besar, karena saya hanya menggunakan Eclipse untuk pengembangan Java dan melakukan pengembangan C saya dengan vim dan gdb:

  • Kompilasi build debug dari PostgreSQL (dikompilasi dengan ./configure --enable-debug dan sebaiknya juga CFLAGS="-ggdb -Og -fno-omit-frame-pointer" ). Tentukan --prefix dalam homedir Anda, seperti --prefix=$HOME/postgres-debug

  • Letakkan bin build debug Anda direktori pertama di PATH . Anda , misalnya export PATH=$HOME/postgres-debug/bin:$PATH

  • initdb -U postgres -D $HOME/postgres-debug-data instance baru PostgreSQL dari build debug Anda

  • Mulai instance baru dengan PGPORT=5599 pg_ctl -D $HOME/postgres-debug-data -l $HOME/postgres-debug-data.log -w start

  • Terhubung dengan PGPORT=5599 psql postgres

  • Lakukan penyiapan apa pun yang perlu Anda lakukan

  • Dapatkan ID proses backend dengan SELECT pg_backend_pid() dalam psql sidang. Biarkan sesi itu terbuka; itu yang akan Anda debug.

  • Lampirkan debugger Eclipse ke ID proses tersebut, menggunakan proyek Eclipse yang berisi kode sumber ekstensi PostgreSQL yang Anda debug. Pastikan Eclipse dikonfigurasi sehingga dapat menemukan kode sumber PostgreSQL yang Anda kompilasi juga (tidak tahu bagaimana melakukannya, lihat manual).

  • Setel breakpoint yang diinginkan dan lanjutkan eksekusi

  • Dalam psql sesi, lakukan apa pun yang perlu Anda lakukan untuk membuat ekstensi Anda berjalan dan mencapai titik henti sementara

  • Saat eksekusi berhenti di breakpoint di Eclipse, debug sesuai keinginan.

Kesalahpahaman mendasar?

Juga, jika Anda benar-benar bingung tentang bagaimana semua ini bekerja:PostgreSQL adalah aplikasi klien/server. Jika Anda mencoba men-debug program klien yang menggunakan libpq atau odbc, dan mengharapkan breakpoint untuk dipicu di beberapa kode ekstensi backend PostgreSQL, itu tidak akan terjadi. Aplikasi klien berkomunikasi dengan PostgreSQL melalui soket TCP/IP. Ini adalah program yang terpisah. gdb tidak dapat menyetel breakpoint di server PostgreSQL saat terhubung ke klien, karena keduanya adalah program yang terpisah. Jika Anda ingin men-debug server, Anda harus melampirkan gdb ke server. PostgreSQL menggunakan satu proses per koneksi, jadi Anda harus melampirkan gdb ke benar proses server. Itulah mengapa saya mengatakan untuk menggunakan SELECT pg_backend_pid() di atas, dan lampirkan ke ID proses.

Lihat dokumentasi internal yang ditautkan di atas, dan:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencadangan &Pemulihan PostgreSQL 9.0

  2. Bagaimana saya bisa memperbaiki Python F-string saya dalam kueri saya agar tidak rentan terhadap injeksi SQL?

  3. Alternatif pgAdmin - ClusterControl GUI Manajemen Database PostgreSQL

  4. Membuat operator kesetaraan khusus untuk tipe PostgreSQL (titik) untuk panggilan DISTINCT

  5. Pilih grup pengguna yang berbeda berdasarkan rentang waktu