Hi all, First, sorry to step in this discussion this late. I didn't noticed it before :(
I did some work about these compatibility issues in late 2020 to use PostgresNode in the check_pgactivity TAP tests. See https://github.com/ioguix/check_pgactivity/tree/tests/t/lib PostgresNode.pm, TestLib.pm, SimpleTee.pm and RecursiveCopy.pm comes unchanged from PostgreSQL source file (see headers and COPYRIGHT.pgsql). Then, I'm using the facet class PostgresNodeFacet to extend it with some more methods. Finaly, I created one class per majpr version, each inheriting from the next version. That means 13 inherits from PostgresNodeFacet.pm, 12 inherits from 13, 11 inherits from 12, etc. When I'm creating a new node, I'm using the "pgaTester" factory class. It relies on PATH to check the major version using pg_config, then loads the appropriate class. That means some class overrides almost no methods but version(), which returns the major version. Eg.: https://github.com/ioguix/check_pgactivity/blob/tests/t/lib/PostgresNode12.pm From tests, I can check the node version using this method, eg.: skip "skip non-compatible test on PostgreSQL 8.0 and before", 3 unless $node->version <= 8.0; Of course, there's a lot of duplicate code between classes, but my main goal was to keep PostgresNode.pm unchanged from upstream so I can easily update it. And here is a demo test file: https://github.com/ioguix/check_pgactivity/blob/tests/t/01-streaming_delta.t My limited set of tests are working with versions back to 9.0 so far. My 2ยข