sql >> Database teknologi >  >> RDS >> PostgreSQL

brudpunkter i eclipse ved hjælp af postgresql

Problem 1:Uoverensstemmelse med bruger-id

Når man læser mellem linjerne, lyder det, som om du forsøger at fejlsøge en PostgreSQL-instans, der kører som postgres bruger eller alligevel et andet bruger-id end dit eget. Derfor dit forsøg på at bruge sudo .

Det er smertefuldt, især når du bruger en IDE som Eclipse. Med almindelig gdb du kan bare sudo gdb-kommandoen til den ønskede uid, f.eks. sudo -u postgres -p 12345 at vedhæfte til pid 12345, der kører som bruger postgres . Dette vil ikke fungere med Eclipse. Faktisk kører det med sudo har sandsynligvis forladt dit arbejdsområde med nogle rodede filtilladelser; køre:

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

for at rette filejerskab.

Hvis du vil fejlsøge processer under andre bruger-id'er med Eclipse, skal du finde ud af, hvordan du får Eclipse til at køre gdb med sudo. Gør ikke bare kør hele Eclipse med sudo .

Problem 2:Forsøger at køre PostgreSQL under kontrol af Eclipse

Dette:

foreslår, at du også forsøger at lade Eclipse starte postgres direkte. Det er meget nyttigt, hvis du forsøger at fejlsøge postmasteren , men da du taler om forespørgselsplanlæggeren, er det klart, at du vil fejlrette en bestemt backend. At starte postmasteren under Eclipse er nytteløst for det, du vil blive knyttet til den forkerte proces.

Jeg tror nok, du skal læse dokumentationen om PostgreSQL's interne:

Gør det rigtigt

Her er hvad du skal gøre - groft oversigt, da jeg kun har brugt Eclipse til Java-udvikling og laver min C-udvikling med vim og gdb:

  • Kompiler en debug build af PostgreSQL (kompileret med ./configure --enable-debug og helst også CFLAGS="-ggdb -Og -fno-omit-frame-pointer" ). Angiv et --prefix i dit homedir, som --prefix=$HOME/postgres-debug

  • Indsæt din debug builds bin mappe først på din PATH , for eksempel. export PATH=$HOME/postgres-debug/bin:$PATH

  • initdb -U postgres -D $HOME/postgres-debug-data en ny forekomst af PostgreSQL fra din debug-build

  • Start den nye instans med PGPORT=5599 pg_ctl -D $HOME/postgres-debug-data -l $HOME/postgres-debug-data.log -w start

  • Forbind med PGPORT=5599 psql postgres

  • Gør den opsætning, du skal gøre

  • Få backend-proces-id'et med SELECT pg_backend_pid() i en psql session. Lad den session være åben; det er den, du skal fejlfinde.

  • Vedhæft Eclipses debugger til dette proces-id ved hjælp af Eclipse-projektet, der indeholder PostgreSQL-udvidelsens kildekode, du fejlretter. Sørg for, at Eclipse er konfigureret, så den også kan finde den PostgreSQL-kildekode, du kompilerede med (ingen idé om, hvordan man gør det, se manualen).

  • Indstil eventuelle ønskede pausepunkter og genoptag eksekveringen

  • I psql session, gør hvad du skal gøre for at få din udvidelse til at køre og ramme pausepunktet

  • Når udførelsen stopper ved pausepunktet i Eclipse, skal du fejlfinde som ønsket.

Grundlæggende misforståelser?

Også hvis du er virkelig forvirret over, hvordan alt dette virker:PostgreSQL er en klient/server-applikation. Hvis du forsøger at fejlfinde et klientprogram der bruger libpq eller odbc, og forventer, at et brudpunkt udløses i en eller anden PostgreSQL-backend-udvidelseskode, det kommer ikke til at ske. Klientapplikationen kommunikerer med PostgreSQL over en TCP/IP-socket. Det er et separat program. gdb kan ikke indstille breakpoints i PostgreSQL-serveren, når den er forbundet til klienten, fordi de er separate programmer. Hvis du vil fejlsøge serveren, skal du vedhæfte gdb til serveren. PostgreSQL bruger én proces pr. forbindelse, så du skal vedhæfte gdb til den korrekte server proces. Derfor sagde jeg at bruge SELECT pg_backend_pid() ovenfor, og vedhæft til proces-id'et.

Se den interne dokumentation, der er linket ovenfor, og:



  1. Postgres pl/pgsql FEJL:kolonne kolonnenavn eksisterer ikke

  2. Hvordan kan jeg få en MySQL SUM-forespørgsel til at returnere nul i stedet for null, hvis der ikke er nogen poster?

  3. Hvordan sender man kun click event (div), når man bruger jquery live funktion?

  4. Forståelse af Hadoop Input Output System