Revision history for Pg-Explain
2.7 2023/12/29
Properly handle various I/O Timings formats
per information from Michael Paquier
2.6 2023/01/26
- Fix handling of Planning I/O timings
per report from Christoph Berg
2.5 2023/01/16
- Fix handling of non-ascii characters in json and yaml plans
per report from James Courtney
- Update copyright
2.4 2022/11/12
- Allow easy anonymization of extra strings using built-in anonymizer
2.3 2022/10/21
- Fix extracting settings from verbose plan
Per report from Yaroslav Schekin
2.2 2022/09/25
- Handle WorkTable Scans in non-text plans.
Per report from Jamey Courtney
2.1 2022/03/07
- Add hints for seq scans with multiple conditions joined with AND, if
the conditions are equality checks
(INDEXABLE_SEQSCAN_MULTI_EQUAL_AND)
2.0 2022/02/11
- Add Pg::Explain::Hinter to look through Pg::Explain plans, and
suggest optimizations.
For now two automatically found optimizations are there:
- DISK_SORT - when there is Sort node that is using disk sort
- INDEXABLE_SEQSCAN_SIMPLE - when there is Seq Scan (or Parallel Seq
Scan) that is using simple expression on one column that can be
indexed
- Fix dependency on List::Util by requiring v. 1.44+
- use JSON::MaybeXS instead of JSON, due to talk on irc/#mojo
(suggestion by ether with comments from Grinnz)
1.13 2021/08/03
- New functionality:
- Nodes have now ->id() method which returns numeric value, which is
unique within explain
- Explain object can call ->node( ID ) to get node with specified ID
- Parse properly metainformation about InitPlans (name, and what it
returns)
- Fixes:
- Fix generating of text representation of plans with worktable scan
nodes.
- Fix exclusive time calculations for plans with InitPlans and CTEs
- Speedup of parsing of some edge-case plans
1.12 2021/07/18
- New functionality:
- Parse GUC settings from plans, per:
https://gitlab.com/depesz/Pg--Explain/-/issues/11
- Helper script (dump.pl) - change it so that substructs are dumped
at the end
- Fixes:
- Fix exclusive buffers calcualtion, per:
https://gitlab.com/depesz/explain.depesz.com/-/issues/24
- Remove various warnings that can happen with badly wrapped plans
- Remove warning when parsing plans with VERY long lines (over 60k
characters)
1.11 2021/07/04
- Added parsing of Buffers info
1.10 2021/06/08
- Add a way to get total number of rows returned by node over multiple
loops or workers ($node->total_rows)
- Add method (total_removed_rows) which shows how many rows were
removed in given node by one of:
- Conflict Filter
- Filter
- Index Recheck
- Join Filter
1.09 2021/06/07
- Fix parsing of planning/execution time in case of "quoted" plans and
no trailing new line.
- Add extraction of:
- Conflicting Tuples
- Conflict Arbiter Indexes
- Conflict Filter
- Conflict Resolution
- Filter
- Join Filter
- Recheck Cond
- Rows Removed by Conflict Filter
- Rows Removed by Filter
- Rows Removed by Index Recheck
- Rows Removed by Join Filter
- Tuples Inserted
from non-text plans.
1.08 2021/05/15
- Provide links to bugtracker and homepage for CPAN
per report from Eugen Konkov
1.07 2021/04/14
- Parse query text from auto-explain plans.
Missing functionality reported by Jamey Courtney.
1.06 2021/03/03
- Fixed handling of Backward (Index|Index Only) Scans in non-text plans.
Bug reported by Yaroslav Schekin (ysch) on IRC.
1.05 2021/02/18
- Add parsing of JIT information from plans in all four formats (text, json, yaml, xml)
1.04 2020/12/21
- Add handling of autoexplain plans in non-text formats.
Apparently autoexplain logs plans that are different from normal
explain command when using json/yaml/xml.
Problem reported by Robert Emery.
1.03 2020/09/17
- Fix bug in parsing json/yaml/xml plans that contained Function Scans
1.02 2020/07/27
- Fix bug with preserving whitespace in anonymized queries
1.01 2020/07/27
- Make it possible to anonymize queries using the same anonymization
engine that is used to anonymize plan.
1.00 2020/06/06
- Make generated text explains more like Pg
- Parse planning time from explains from PostgreSQL 13
0.99 2020/04/23
- Fix requirements for tests
0.98 2020/04/17
- Add links to git repo for cpan tools (by Tom Hukins)
- Fix parsing plans with tabs instead of spaces (by Pierre GIRAUD)
0.97 2020/04/03
- Allow parsing of plans inside psql generated frames
- Provide a way to easily get all subnodes, including subnodes of subnodes
- Provide a way to easily get parents of given node
- Remove unnecessary Data::Dumper loads in tests
- Assume plans should be in UTF-8
0.96 2020/03/23
- Performance optimizations
- Fix handling of certains misaligned plans
- Fix heuristics to detect JSON plans
- Fix some errors in parsing plans
0.95 2020/03/16
- Add parsing/anonymization of Tid Scans,
per gripe from Chris West.
0.94 2020/03/16
- Add initial handling of plans with hard line wraps.
0.93 2020/02/26
- Add handling for MixedAggregate to json/yaml formats.
Per gripe from RhodiumToad.
0.92 2020/02/18
- Recognize various Aggregate nodes from non-text explains.
Per bug report from RhodiumToad.
0.91 2020/01/07
- Make all times be wall-clock times. That is - take into account
number of parallel workers
- Re-add version to all libs, to make cpan happy
0.90 2019/11/12
- Fix display of heap fetches from json (https://gitlab.com/depesz/explain.depesz.com/issues/15)
- Move global data (planning/execution/total time, trigger info) from top_node to explain object itself
- Add method to easily get real total, wall-clock, runtime of query.
- Add Pg::Explain::Analyzer, so far it can extract node types and their "paths"
- Add scripts to run perltidy, start development tmux env, and explain schema dumper
- Fix handling of parallel queries (hopefully)
- Remove edge-case deep recursion error
- Speed optimization for large explains
0.81 2019/08/26
# Remove trailing whitespace - it makes next line matches MUCH faster.
$line =~ s/\s*\z//;
- Handle properly single-line JSON plans
per report from William Meitzen
- Fix MANIFEST file, so it passes tests
- Fix message on missing Test::PerlTidy module
- Fix code formatting (perltidy)
0.80 2019/06/18
- Allow parsing of plans with COSTS disabled.
per gripe from Marc
- Properly parse WorkTable Scans
per gripe from Ivan Vergiliev
0.79 2019/06/12
- Added parsing of "Planning time", "Execution time", and "Trigger
time"
0.78 2019/03/29
- Fix parsing of json explain, when there is no trailing new line
character.
Bug reported by Grenville Wilson.
0.77 2018/08/09
- Add missing information to data when parsing json/yaml plans
Code provided by Filip RembiaĆkowski
0.76 2018/02/05
- Recognize properly parallel index scans and their table/index info
Problem reported by Matthijs van der Vleuten
0.75 2017/11/29
- Change inclusive time calculation for parallel nodes to calculate
wall clock time, and not total time used.
Problem reported by Bricklen Anderson.
0.74 2017/06/20
- Fix extracting subquery name (problem reported by Jackson Popkin)
- Switch from using Digest::SHA1 to Digest::SHA
0.73 2016/02/08
- Add anonymization of grouping keys
0.72 2015/10/13
- Add anonymization of subquery scan names
0.71 2014/06/04
- Fix missing dependency, no functional changes
0.70 2014/06/03
- Allow parsing of plans without timing information, per request from Karl Bartel
0.69 2014/06/08
- Anonymize CTE names, per gripe from Brian Dunavant
0.68 2013/10/01
- Fix extracting of table/index info from "Index Only Scan" nodes from
YAML/XML/JSON explains.
Bug reported by David Wheeler (justatheory)
0.67 2013/05/24
- Fix anonymization of Index Only Scans
- Fix perlcritic tests
0.66 2013/03/30
- Fix anonymization of One-time filter: lines.
0.65 2012/11/08
- Fix anonymization of tables in explains of modifying queries (insert/update/delete)
- Fix anonymization of function names in function scans
0.64 2012/08/22
- Fix handling of really large number of estimated rows (over 2^53)
0.63 2012/07/08
- Anonymize names of files used by foreign tables
- Anonymize names of foreign tables
- Anonymize names of columns when dealing with EXPLAIN ANALYZE VERBOSE output with "Output: a, b, c" lines
0.62 2012/01/31
- Stop anonymize from changing typecasts to standard pg types
0.61 2011/06/20
- Add handling of plans with trailing " character, but without leading " character.
0.60 2011/06/11
- Added anonymization of plans.
- Make it possible to generate textual plan from parsed one
0.54 2011/05/31
- Make the parsing run fast in Mojolicious environment
- Fix MANIFEST.SKIP to include .git
0.53 2011/05/19
- Allow explain lines to be inside ' characters (some client does that, not sure which)
- Add missing "use Carp;"
0.52 2011/04/30
- Fix for handling windows-style end-of-line markers in pgAdmin output.
Bug reported by Dave Jarvis.
0.51 2011/03/26
- Fix calculation of exclusive time of nodes with CTE
0.50 2011/03/26
- Add support for CTE in plans
2011/03/25
- Add ability to parse XML plans
- Add ability to parse JSON plans
- Add ability to parse YAML plans
- Add filter to make it possible to parse explains from pgAdmin3
0.20 2011/03/19
- Remove usage of Moose. It's faster, and will not cause unrelated test failures in CPAN reports.
0.11 2010/12/16 23:34
- Improve calculation of exclusive times, plus minor fixes [patch by filip.rembialkowski@gmail.com].
0.10 2010-03-17 14:15:59
- Add handling for new "SubPlan" lines, which contain numeric ID of scan.
0.09 2009-05-27 13:15
- Fix exclusive time calculations
- Make PE::Node understand Bitmap scans (heap and index)
- Add proper handling of nodes that were "never executed"
- Add ->is_analyzed method to PE::Node to make it easy to distinguish between EXPLAIN and EXPLAIN ANALYZE nodes
0.08 2008-11-24 21:11
- Add missing documentation
0.07 2008-11-18 11:42
- Added missing dependancy - responsible for most of fails in cpan tests
- Changed the way to detect error thrown by autodie when opening file fails
- Renamed test plans to make them sort nicely
- New functionality: PE::Node->total_inclusive_time
- New functionality: PE::Node->total_exclusive_time
- New tests
0.06 2008-11-15 21:27
Name changed to Pg::Explain after conversation on IRC. Main points:
- Pg is shorter
- Pg already exists
- Pg is used already by PostgreSQL related modules
0.05 2008-11-11 17:01
Add handling of init and subplans. Added more test. Refactorig of parsing method. Basic functionality done.
0.04 2008-10-27 00:40
Add handling of subnodes. Add extraction of scan info for "Index Scan Backward" nodes.
0.03 2008-10-26 21:25
Make it parse index scans, handle basic extra-info, remove dependency on YAML, and make tests using Test::Deep.
0.02 2008-10-19 20:07
More tests, and changes to make it more Moose-way
0.01 2008-10-19 15:56
First version, Not much of functionality now, but builds, and passes simple test.