@@ -395,4 +395,202 @@ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C";
395
395
SELECT pg_stat_statements_reset() | 1 | 1
396
396
(8 rows)
397
397
398
+ --
399
+ -- Track user activity and reset them
400
+ --
401
+ SELECT pg_stat_statements_reset();
402
+ pg_stat_statements_reset
403
+ --------------------------
404
+
405
+ (1 row)
406
+
407
+ CREATE ROLE regress_stats_user1;
408
+ CREATE ROLE regress_stats_user2;
409
+ SET ROLE regress_stats_user1;
410
+ SELECT 1 AS "ONE";
411
+ ONE
412
+ -----
413
+ 1
414
+ (1 row)
415
+
416
+ SELECT 1+1 AS "TWO";
417
+ TWO
418
+ -----
419
+ 2
420
+ (1 row)
421
+
422
+ RESET ROLE;
423
+ SET ROLE regress_stats_user2;
424
+ SELECT 1 AS "ONE";
425
+ ONE
426
+ -----
427
+ 1
428
+ (1 row)
429
+
430
+ SELECT 1+1 AS "TWO";
431
+ TWO
432
+ -----
433
+ 2
434
+ (1 row)
435
+
436
+ RESET ROLE;
437
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C";
438
+ query | calls | rows
439
+ -----------------------------------+-------+------
440
+ CREATE ROLE regress_stats_user1 | 1 | 0
441
+ CREATE ROLE regress_stats_user2 | 1 | 0
442
+ RESET ROLE | 2 | 0
443
+ SELECT $1 AS "ONE" | 1 | 1
444
+ SELECT $1 AS "ONE" | 1 | 1
445
+ SELECT $1+$2 AS "TWO" | 1 | 1
446
+ SELECT $1+$2 AS "TWO" | 1 | 1
447
+ SELECT pg_stat_statements_reset() | 1 | 1
448
+ SET ROLE regress_stats_user1 | 1 | 0
449
+ SET ROLE regress_stats_user2 | 1 | 0
450
+ (10 rows)
451
+
452
+ --
453
+ -- Don't reset anything if any of the parameter is NULL
454
+ --
455
+ SELECT pg_stat_statements_reset(NULL);
456
+ pg_stat_statements_reset
457
+ --------------------------
458
+
459
+ (1 row)
460
+
461
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C";
462
+ query | calls | rows
463
+ ------------------------------------------------------------------------------+-------+------
464
+ CREATE ROLE regress_stats_user1 | 1 | 0
465
+ CREATE ROLE regress_stats_user2 | 1 | 0
466
+ RESET ROLE | 2 | 0
467
+ SELECT $1 AS "ONE" | 1 | 1
468
+ SELECT $1 AS "ONE" | 1 | 1
469
+ SELECT $1+$2 AS "TWO" | 1 | 1
470
+ SELECT $1+$2 AS "TWO" | 1 | 1
471
+ SELECT pg_stat_statements_reset($1) | 1 | 1
472
+ SELECT pg_stat_statements_reset() | 1 | 1
473
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 1 | 10
474
+ SET ROLE regress_stats_user1 | 1 | 0
475
+ SET ROLE regress_stats_user2 | 1 | 0
476
+ (12 rows)
477
+
478
+ --
479
+ -- remove query ('SELECT $1+$2 AS "TWO"') executed by regress_stats_user2
480
+ -- in the current_database
481
+ --
482
+ SELECT pg_stat_statements_reset(
483
+ (SELECT r.oid FROM pg_roles AS r WHERE r.rolname = 'regress_stats_user2'),
484
+ (SELECT d.oid FROM pg_database As d where datname = current_database()),
485
+ (SELECT s.queryid FROM pg_stat_statements AS s
486
+ WHERE s.query = 'SELECT $1+$2 AS "TWO"' LIMIT 1));
487
+ pg_stat_statements_reset
488
+ --------------------------
489
+
490
+ (1 row)
491
+
492
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C";
493
+ query | calls | rows
494
+ ----------------------------------------------------------------------------------+-------+------
495
+ CREATE ROLE regress_stats_user1 | 1 | 0
496
+ CREATE ROLE regress_stats_user2 | 1 | 0
497
+ RESET ROLE | 2 | 0
498
+ SELECT $1 AS "ONE" | 1 | 1
499
+ SELECT $1 AS "ONE" | 1 | 1
500
+ SELECT $1+$2 AS "TWO" | 1 | 1
501
+ SELECT pg_stat_statements_reset( +| 1 | 1
502
+ (SELECT r.oid FROM pg_roles AS r WHERE r.rolname = $1), +| |
503
+ (SELECT d.oid FROM pg_database As d where datname = current_database()),+| |
504
+ (SELECT s.queryid FROM pg_stat_statements AS s +| |
505
+ WHERE s.query = $2 LIMIT $3)) | |
506
+ SELECT pg_stat_statements_reset($1) | 1 | 1
507
+ SELECT pg_stat_statements_reset() | 1 | 1
508
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 2 | 22
509
+ SET ROLE regress_stats_user1 | 1 | 0
510
+ SET ROLE regress_stats_user2 | 1 | 0
511
+ (12 rows)
512
+
513
+ --
514
+ -- remove query ('SELECT $1 AS "ONE"') executed by two users
515
+ --
516
+ SELECT pg_stat_statements_reset(0,0,s.queryid)
517
+ FROM pg_stat_statements AS s WHERE s.query = 'SELECT $1 AS "ONE"';
518
+ pg_stat_statements_reset
519
+ --------------------------
520
+
521
+
522
+ (2 rows)
523
+
524
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C";
525
+ query | calls | rows
526
+ ----------------------------------------------------------------------------------+-------+------
527
+ CREATE ROLE regress_stats_user1 | 1 | 0
528
+ CREATE ROLE regress_stats_user2 | 1 | 0
529
+ RESET ROLE | 2 | 0
530
+ SELECT $1+$2 AS "TWO" | 1 | 1
531
+ SELECT pg_stat_statements_reset( +| 1 | 1
532
+ (SELECT r.oid FROM pg_roles AS r WHERE r.rolname = $1), +| |
533
+ (SELECT d.oid FROM pg_database As d where datname = current_database()),+| |
534
+ (SELECT s.queryid FROM pg_stat_statements AS s +| |
535
+ WHERE s.query = $2 LIMIT $3)) | |
536
+ SELECT pg_stat_statements_reset($1) | 1 | 1
537
+ SELECT pg_stat_statements_reset($1,$2,s.queryid) +| 1 | 2
538
+ FROM pg_stat_statements AS s WHERE s.query = $3 | |
539
+ SELECT pg_stat_statements_reset() | 1 | 1
540
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 3 | 34
541
+ SET ROLE regress_stats_user1 | 1 | 0
542
+ SET ROLE regress_stats_user2 | 1 | 0
543
+ (11 rows)
544
+
545
+ --
546
+ -- remove query of a user (regress_stats_user1)
547
+ --
548
+ SELECT pg_stat_statements_reset(r.oid)
549
+ FROM pg_roles AS r WHERE r.rolname = 'regress_stats_user1';
550
+ pg_stat_statements_reset
551
+ --------------------------
552
+
553
+ (1 row)
554
+
555
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C";
556
+ query | calls | rows
557
+ ----------------------------------------------------------------------------------+-------+------
558
+ CREATE ROLE regress_stats_user1 | 1 | 0
559
+ CREATE ROLE regress_stats_user2 | 1 | 0
560
+ RESET ROLE | 2 | 0
561
+ SELECT pg_stat_statements_reset( +| 1 | 1
562
+ (SELECT r.oid FROM pg_roles AS r WHERE r.rolname = $1), +| |
563
+ (SELECT d.oid FROM pg_database As d where datname = current_database()),+| |
564
+ (SELECT s.queryid FROM pg_stat_statements AS s +| |
565
+ WHERE s.query = $2 LIMIT $3)) | |
566
+ SELECT pg_stat_statements_reset($1) | 1 | 1
567
+ SELECT pg_stat_statements_reset($1,$2,s.queryid) +| 1 | 2
568
+ FROM pg_stat_statements AS s WHERE s.query = $3 | |
569
+ SELECT pg_stat_statements_reset() | 1 | 1
570
+ SELECT pg_stat_statements_reset(r.oid) +| 1 | 1
571
+ FROM pg_roles AS r WHERE r.rolname = $1 | |
572
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C" | 4 | 45
573
+ SET ROLE regress_stats_user2 | 1 | 0
574
+ (10 rows)
575
+
576
+ --
577
+ -- reset all
578
+ --
579
+ SELECT pg_stat_statements_reset(0,0,0);
580
+ pg_stat_statements_reset
581
+ --------------------------
582
+
583
+ (1 row)
584
+
585
+ SELECT query, calls, rows FROM pg_stat_statements ORDER BY query COLLATE "C";
586
+ query | calls | rows
587
+ ----------------------------------------+-------+------
588
+ SELECT pg_stat_statements_reset(0,0,0) | 1 | 1
589
+ (1 row)
590
+
591
+ --
592
+ -- cleanup
593
+ --
594
+ DROP ROLE regress_stats_user1;
595
+ DROP ROLE regress_stats_user2;
398
596
DROP EXTENSION pg_stat_statements;
0 commit comments