From 9f1e864d02ed4ec57105e531815ac7c113963559 Mon Sep 17 00:00:00 2001
From: Bruce Momjian Last updated: Sun Mar 13 22:07:18 EST 2005 Last updated: Sat Apr 23 14:57:40 EDT 2005 Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)Developer's Frequently Asked Questions (FAQ) for
PostgreSQL
-
@@ -71,6 +71,8 @@
pfree() to allocate memory?
2.6) What is ereport()?
2.7) What is CommandCounterIncrement()?
+ 2.8) What debugging features are available?
+
@@ -941,6 +943,45 @@
modified by previous pieces. CommandCounterIncrement()
increments the Command Counter, creating a new part of the
transaction.
First, try running configure with the --enable-cassert + option, many assert()s monitor the progress of the backend + and halt the program when something unexpected occurs.
+ +The postmaster has a -d option that allows even more + detailed information to be reported. The -d option takes a + number that specifies the debug level. Be warned that high debug + level values generate large log files.
+ +If the postmaster is not running, you can actually run the + postgres backend from the command line, and type your + SQL statement directly. This is recommended + only for debugging purposes. If you have compiled with debugging + symbols, you can use a debugger to see what is happening. Because + the backend was not started from postmaster, it is not + running in an identical environment and locking/backend interaction + problems may not be duplicated.
+ +If the postmaster is running, start psql in one
+ window, then find the PID of the postgres
+ process used by psql using SELECT pg_backend_pid()
.
+ Use a debugger to attach to the postgres PID.
+ You can set breakpoints in the debugger and issue queries from
+
+ psql. If you are debugging postgres startup, you can
+ set PGOPTIONS="-W n", then start psql. This will cause startup
+ to delay for n seconds so you can attach to the process with
+ the debugger, set any breakpoints, and continue through the startup
+ sequence.
You can also compile with profiling to see what functions are + taking execution time. The backend profile files will be deposited + in the pgsql/data/base/dbname directory. The client profile + file will be put in the client's current directory. Linux requires + a compile with -DLINUX_PROFILE for proper profiling.