Include pg_trace.h> if it is not already present in the
- module(s) containing the probe points, and insert TRACE_POSTGRESQL
- probe macros at the desired locations in the source code
+ module(s) containing the probe points, and insert
+ TRACE_POSTGRESQL> probe macros at the desired locations
+ in the source code
- Decide that the probe will be named transaction-start and requires
- a parameter of type LocalTransactionId
+ Decide that the probe will be named transaction-start> and
+ requires a parameter of type LocalTransactionId
Add the probe definition to src/backend/utils/probes.d>:
- ...
probe transaction__start(LocalTransactionId);
- ...
Note the use of the double underline in the probe name. In a DTrace
script using the probe, the double underline needs to be replaced with a
- hyphen.
-
-
- You should take care that the data types specified for the probe
- parameters match the data types of the variables used in the macro.
- Otherwise, you will get compilation errors.
+ hyphen, so transaction-start> is the name to document for
+ users.
- At compile time, transaction__start is converted to a macro called
- TRACE_POSTGRESQL_TRANSACTION_START (note the underscores are single
- here), which is available by including pg_trace.h>.
- Add the macro call to the appropriate location in the source code.
- In this case, it looks like the following:
+ At compile time, transaction__start> is converted to a macro
+ called TRACE_POSTGRESQL_TRANSACTION_START> (notice the
+ underscores are single here), which is available by including
+ pg_trace.h>. Add the macro call to the appropriate location
+ in the source code. In this case, it looks like the following:
TRACE_POSTGRESQL_TRANSACTION_START(vxid.localTransactionId);
+ There are a few things to be careful about when adding trace macros
+ to the C code:
+
+
+
+ You should take care that the data types specified for a probe's
+ parameters match the data types of the variables used in the macro.
+ Otherwise, you will get compilation errors.
+
+
+
+
+
+ On most platforms, if
PostgreSQL is
+ built with
+ macro will be evaluated whenever control passes through the
+ macro, even if no tracing is being done>. This is
+ usually not worth worrying about if you are just reporting the
+ values of a few local variables. But beware of putting expensive
+ function calls into the arguments. If you need to do that,
+ consider protecting the macro with a check to see if the trace
+ is actually enabled:
+
+ if (TRACE_POSTGRESQL_TRANSACTION_START_ENABLED())
+ TRACE_POSTGRESQL_TRANSACTION_START(some_function(...));
+
+
+ Each trace macro has a corresponding ENABLED> macro.
+
+
+
+
+
+