-- Only trace individual statements using unnamed prepared statement BEGIN; /*traceparent='00-00000000000000000000000000000002-0000000000000001-01'*/ select $1 \parse '' \bind_named '' 1 \g ?column? ---------- 1 (1 row) /*traceparent='00-00000000000000000000000000000003-0000000000000001-01'*/ select $1, $2 \parse '' \bind_named '' 1 2 \g ?column? | ?column? ----------+---------- 1 | 2 (1 row) /*traceparent='00-00000000000000000000000000000004-0000000000000001-01'*/ select $1, $2, $3 \parse '' \bind_named '' 1 2 3 \g ?column? | ?column? | ?column? ----------+----------+---------- 1 | 2 | 3 (1 row) COMMIT; SELECT trace_id, span_type, span_operation, parameters, lvl FROM peek_ordered_spans; trace_id | span_type | span_operation | parameters | lvl ----------------------------------+------------------+-------------------+------------+----- 00000000000000000000000000000002 | TransactionBlock | TransactionBlock | | 0 00000000000000000000000000000002 | Select query | select $1 | {1} | 1 00000000000000000000000000000002 | Planner | Planner | | 2 00000000000000000000000000000002 | ExecutorRun | ExecutorRun | | 2 00000000000000000000000000000002 | Result | Result | | 3 00000000000000000000000000000003 | Select query | select $1, $2 | {1,2} | 1 00000000000000000000000000000003 | Planner | Planner | | 2 00000000000000000000000000000003 | ExecutorRun | ExecutorRun | | 2 00000000000000000000000000000003 | Result | Result | | 3 00000000000000000000000000000004 | Select query | select $1, $2, $3 | {1,2,3} | 1 00000000000000000000000000000004 | Planner | Planner | | 2 00000000000000000000000000000004 | ExecutorRun | ExecutorRun | | 2 00000000000000000000000000000004 | Result | Result | | 3 (13 rows) CALL clean_spans(); -- Mix begin in simple protocol with extended protocol usage /*traceparent='00-00000000000000000000000000000005-0000000000000001-01'*/ BEGIN; select $1 \parse '' \bind_named '' 1 \g ?column? ---------- 1 (1 row) select $1, $2 \parse '' \bind_named '' 1 2 \g ?column? | ?column? ----------+---------- 1 | 2 (1 row) select $1, $2, $3 \parse '' \bind_named '' 1 2 3 \g ?column? | ?column? | ?column? ----------+----------+---------- 1 | 2 | 3 (1 row) COMMIT; SELECT trace_id, span_type, span_operation, parameters, lvl FROM peek_ordered_spans; trace_id | span_type | span_operation | parameters | lvl ----------------------------------+------------------+-------------------+------------+----- 00000000000000000000000000000005 | TransactionBlock | TransactionBlock | | 0 00000000000000000000000000000005 | Utility query | BEGIN; | | 1 00000000000000000000000000000005 | ProcessUtility | ProcessUtility | | 2 00000000000000000000000000000005 | Select query | select $1 | {1} | 1 00000000000000000000000000000005 | Planner | Planner | | 2 00000000000000000000000000000005 | ExecutorRun | ExecutorRun | | 2 00000000000000000000000000000005 | Result | Result | | 3 00000000000000000000000000000005 | Select query | select $1, $2 | {1,2} | 1 00000000000000000000000000000005 | Planner | Planner | | 2 00000000000000000000000000000005 | ExecutorRun | ExecutorRun | | 2 00000000000000000000000000000005 | Result | Result | | 3 00000000000000000000000000000005 | Select query | select $1, $2, $3 | {1,2,3} | 1 00000000000000000000000000000005 | Planner | Planner | | 2 00000000000000000000000000000005 | ExecutorRun | ExecutorRun | | 2 00000000000000000000000000000005 | Result | Result | | 3 00000000000000000000000000000005 | Utility query | COMMIT; | | 1 00000000000000000000000000000005 | ProcessUtility | ProcessUtility | | 2 (17 rows) CALL clean_spans(); -- Test using extended protocol for utility statement /*dddbs='postgres.db',traceparent='00-00000000000000000000000000000006-0000000000000001-01'*/ BEGIN \parse begin_stmt \bind_named begin_stmt \g SELECT 1 \parse stmt_mix_1 \bind_named stmt_mix_1 \g ?column? ---------- 1 (1 row) SELECT 1, 2 \parse stmt_mix_2 \bind_named stmt_mix_2 \g ?column? | ?column? ----------+---------- 1 | 2 (1 row) COMMIT \parse commit_stmt \bind_named commit_stmt \g SELECT span_type, span_operation, parameters, lvl FROM peek_ordered_spans where trace_id='00000000000000000000000000000006' AND lvl <= 2; span_type | span_operation | parameters | lvl ------------------+------------------+------------+----- Utility query | BEGIN | | 0 TransactionBlock | TransactionBlock | | 0 Utility query | BEGIN | | 1 ProcessUtility | ProcessUtility | | 2 Select query | SELECT $1 | {1} | 1 Planner | Planner | | 2 ExecutorRun | ExecutorRun | | 2 Select query | SELECT $1, $2 | {1,2} | 1 Planner | Planner | | 2 ExecutorRun | ExecutorRun | | 2 Utility query | COMMIT | | 1 ProcessUtility | ProcessUtility | | 2 (12 rows) SELECT get_epoch(span_end) as span_select_1_end from pg_tracing_peek_spans where span_operation='SELECT $1' and trace_id='00000000000000000000000000000006' \gset SELECT get_epoch(span_start) as span_select_2_start, get_epoch(span_end) as span_select_2_end from pg_tracing_peek_spans where span_operation='SELECT $1, $2' and trace_id='00000000000000000000000000000006' \gset SELECT get_epoch(span_start) as span_commit_start from pg_tracing_peek_spans where span_operation='COMMIT' and trace_id='00000000000000000000000000000006' \gset SELECT :span_select_1_end <= :span_select_2_start, :span_select_2_end <= :span_commit_start; ?column? | ?column? ----------+---------- t | t (1 row) CALL clean_spans(); -- Test with extended protocol while reusing prepared stmts /*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000001-01'*/ BEGIN; \bind_named stmt_mix_1 \g ?column? ---------- 1 (1 row) \bind_named stmt_mix_2 \g ?column? | ?column? ----------+---------- 1 | 2 (1 row) SELECT 1, 2, 3 \parse stmt_mix_3 \bind_named stmt_mix_3 \g ?column? | ?column? | ?column? ----------+----------+---------- 1 | 2 | 3 (1 row) \bind_named commit_stmt \g SELECT span_type, span_operation, parameters, lvl FROM peek_ordered_spans; span_type | span_operation | parameters | lvl ------------------+-------------------+------------+----- TransactionBlock | TransactionBlock | | 0 Utility query | BEGIN; | | 1 ProcessUtility | ProcessUtility | | 2 Select query | SELECT 1 | | 1 ExecutorRun | ExecutorRun | | 2 Result | Result | | 3 Select query | SELECT 1, 2 | | 1 ExecutorRun | ExecutorRun | | 2 Result | Result | | 3 Select query | SELECT $1, $2, $3 | {1,2,3} | 1 Planner | Planner | | 2 ExecutorRun | ExecutorRun | | 2 Result | Result | | 3 Utility query | COMMIT | | 1 ProcessUtility | ProcessUtility | | 2 (15 rows) SELECT get_epoch(span_end) as span_select_1_end from pg_tracing_peek_spans where span_operation='SELECT 1' and trace_id='00000000000000000000000000000001' \gset SELECT get_epoch(span_start) as span_select_2_start, get_epoch(span_end) as span_select_2_end from pg_tracing_peek_spans where span_operation='SELECT 1, 2' and trace_id='00000000000000000000000000000001' \gset SELECT get_epoch(span_start) as span_select_3_start, get_epoch(span_end) as span_select_3_end from pg_tracing_peek_spans where span_operation='SELECT $1, $2, $3' and trace_id='00000000000000000000000000000001' \gset SELECT get_epoch(span_start) as span_commit_start from pg_tracing_peek_spans where span_operation='COMMIT' and trace_id='00000000000000000000000000000001' \gset SELECT :span_select_1_end <= :span_select_2_start, :span_select_2_end <= :span_select_3_start, :span_select_3_end <= :span_commit_start; ?column? | ?column? | ?column? ----------+----------+---------- t | t | t (1 row) DEALLOCATE ALL; CALL clean_spans(); -- Test extended protocol while tracing everything SET pg_tracing.sample_rate = 1.0; BEGIN \parse begin_stmt \bind_named begin_stmt \g SELECT 1 \parse stmt_mix_1 \bind_named stmt_mix_1 \g ?column? ---------- 1 (1 row) SELECT 1, 2 \parse stmt_mix_2 \bind_named stmt_mix_2 \g ?column? | ?column? ----------+---------- 1 | 2 (1 row) COMMIT \parse commit_stmt \bind_named commit_stmt \g SELECT span_type, span_operation, parameters, lvl FROM peek_ordered_spans WHERE lvl <= 2; span_type | span_operation | parameters | lvl ------------------+------------------+------------+----- Utility query | BEGIN | | 0 TransactionBlock | TransactionBlock | | 0 Utility query | BEGIN | | 1 ProcessUtility | ProcessUtility | | 2 Select query | SELECT $1 | {1} | 1 Planner | Planner | | 2 ExecutorRun | ExecutorRun | | 2 Select query | SELECT $1, $2 | {1,2} | 1 Planner | Planner | | 2 ExecutorRun | ExecutorRun | | 2 Utility query | COMMIT | | 1 ProcessUtility | ProcessUtility | | 2 (12 rows) SELECT get_epoch(span_end) as span_select_1_end from pg_tracing_peek_spans where span_operation='SELECT $1' \gset SELECT get_epoch(span_start) as span_select_2_start, get_epoch(span_end) as span_select_2_end from pg_tracing_peek_spans where span_operation='SELECT $1, $2' \gset SELECT get_epoch(span_start) as span_commit_start from pg_tracing_peek_spans where span_operation='COMMIT' \gset SELECT :span_select_1_end <= :span_select_2_start, :span_select_2_end <= :span_commit_start; ?column? | ?column? ----------+---------- t | t (1 row) CALL clean_spans(); -- Cleanup CALL reset_settings(); CALL clean_spans();