From af7930cea2dfad34289d2a51ce72ffa47f6eec86 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Wed, 8 Apr 2026 10:55:24 +0200 Subject: [PATCH] Enhance aggregation functions in SQL queries for improved PostgreSQL compatibility --- .../dbgate-plugin-postgres/src/backend/Analyser.js | 2 ++ .../src/backend/sql/tableList.js | 12 ++++++------ .../src/backend/sql/tableModifications.js | 12 ++++++------ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/plugins/dbgate-plugin-postgres/src/backend/Analyser.js b/plugins/dbgate-plugin-postgres/src/backend/Analyser.js index d77b9fa3c..0f2e76965 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-postgres/src/backend/Analyser.js @@ -72,6 +72,8 @@ class Analyser extends DatabaseAnalyser { ...replacements, $typeAggFunc: this.driver.dialect.stringAgg ? 'string_agg' : 'max', $typeAggParam: this.driver.dialect.stringAgg ? ", '|'" : '', + $hashColumnAggTail: this.driver.dialect.stringAgg ? ", ',' ORDER BY a.attnum" : '', + $hashConstraintAggTail: this.driver.dialect.stringAgg ? ", ',' ORDER BY con.conname" : '', $md5Function: this.dialect?.isFipsComplianceOn ? 'LENGTH' : 'MD5', }); return query; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js b/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js index 70a567c42..5ead6294a 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js @@ -5,9 +5,9 @@ SELECT pg_relation_size(c.oid) AS "size_bytes", $md5Function( COALESCE( - (SELECT string_agg( - a.attname || ':' || pg_catalog.format_type(a.atttypid, a.atttypmod) || ':' || a.attnotnull::text, - ',' ORDER BY a.attnum + (SELECT $typeAggFunc( + a.attname || ':' || pg_catalog.format_type(a.atttypid, a.atttypmod) || ':' || a.attnotnull::text + $hashColumnAggTail ) FROM pg_catalog.pg_attribute a WHERE a.attrelid = c.oid AND a.attnum > 0 AND NOT a.attisdropped), @@ -16,9 +16,9 @@ SELECT ) AS "hash_code_columns", $md5Function( COALESCE( - (SELECT string_agg( - con.conname || ':' || con.contype::text, - ',' ORDER BY con.conname + (SELECT $typeAggFunc( + con.conname || ':' || con.contype::text + $hashConstraintAggTail ) FROM pg_catalog.pg_constraint con WHERE con.conrelid = c.oid), diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js index 80a96e073..0daf7b036 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js @@ -4,9 +4,9 @@ SELECT c.relname AS "pure_name", $md5Function( COALESCE( - (SELECT string_agg( - a.attname || ':' || pg_catalog.format_type(a.atttypid, a.atttypmod) || ':' || a.attnotnull::text, - ',' ORDER BY a.attnum + (SELECT $typeAggFunc( + a.attname || ':' || pg_catalog.format_type(a.atttypid, a.atttypmod) || ':' || a.attnotnull::text + $hashColumnAggTail ) FROM pg_catalog.pg_attribute a WHERE a.attrelid = c.oid AND a.attnum > 0 AND NOT a.attisdropped), @@ -15,9 +15,9 @@ SELECT ) AS "hash_code_columns", $md5Function( COALESCE( - (SELECT string_agg( - con.conname || ':' || con.contype::text, - ',' ORDER BY con.conname + (SELECT $typeAggFunc( + con.conname || ':' || con.contype::text + $hashConstraintAggTail ) FROM pg_catalog.pg_constraint con WHERE con.conrelid = c.oid),