Skip to content

Commit 8ca45b1

Browse files
committed
fix: extract PG version from A003 settings data (server_version_num)
Instead of relying only on postgres_version field, now also extracts version info from server_version and server_version_num settings which are part of the A003 data itself.
1 parent c875dc6 commit 8ca45b1

File tree

1 file changed

+44
-6
lines changed

1 file changed

+44
-6
lines changed

reporter/postgres_reports.py

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2043,25 +2043,63 @@ def filter_a003_settings(self, a003_report: Dict[str, Any], setting_names: List[
20432043

20442044
def extract_postgres_version_from_a003(self, a003_report: Dict[str, Any], node_name: str = None) -> Dict[str, str]:
20452045
"""
2046-
Extract PostgreSQL version info from A003 report.
2046+
Extract PostgreSQL version info from A003 report settings data.
2047+
2048+
Derives version from server_version and server_version_num settings
2049+
which are part of the A003 settings data.
20472050
20482051
Args:
20492052
a003_report: Full A003 report
20502053
node_name: Optional specific node name. If None, uses first available node.
20512054
20522055
Returns:
2053-
Dictionary with postgres version info
2056+
Dictionary with postgres version info (version, server_version_num, server_major_ver, server_minor_ver)
20542057
"""
20552058
results = a003_report.get('results', {})
20562059
if not results:
20572060
return {}
20582061

2062+
# Get the node data
20592063
if node_name and node_name in results:
2060-
return results[node_name].get('postgres_version', {})
2064+
node_data = results[node_name]
2065+
else:
2066+
node_data = next(iter(results.values()), {})
2067+
2068+
# First check if postgres_version is already in the node result
2069+
if node_data.get('postgres_version'):
2070+
return node_data['postgres_version']
2071+
2072+
# Otherwise, extract from settings data (server_version, server_version_num)
2073+
data = node_data.get('data', {})
2074+
version_str = None
2075+
version_num = None
2076+
2077+
# Look for server_version and server_version_num in settings
2078+
if 'server_version' in data:
2079+
version_str = data['server_version'].get('setting', '')
2080+
if 'server_version_num' in data:
2081+
version_num = data['server_version_num'].get('setting', '')
20612082

2062-
# Use first available node
2063-
first_node = next(iter(results.values()), {})
2064-
return first_node.get('postgres_version', {})
2083+
if not version_str and not version_num:
2084+
return {}
2085+
2086+
# Parse version numbers
2087+
major_ver = ""
2088+
minor_ver = ""
2089+
if version_num and len(version_num) >= 6:
2090+
try:
2091+
num = int(version_num)
2092+
major_ver = str(num // 10000)
2093+
minor_ver = str(num % 10000)
2094+
except ValueError:
2095+
pass
2096+
2097+
return {
2098+
"version": version_str or "",
2099+
"server_version_num": version_num or "",
2100+
"server_major_ver": major_ver,
2101+
"server_minor_ver": minor_ver
2102+
}
20652103

20662104
def generate_d004_from_a003(self, a003_report: Dict[str, Any], cluster: str = "local",
20672105
node_name: str = "node-01") -> Dict[str, Any]:

0 commit comments

Comments
 (0)