diff --git a/plugins/dbgate-plugin-postgres/src/backend/Analyser.js b/plugins/dbgate-plugin-postgres/src/backend/Analyser.js index 8eea10464..8fba8d643 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-postgres/src/backend/Analyser.js @@ -56,7 +56,12 @@ class Analyser extends DatabaseAnalyser { } createQuery(resFileName, typeFields, replacements = {}) { - const query = super.createQuery(sql[resFileName], typeFields, replacements); + const query = super.createQuery(sql[resFileName], typeFields, { + ...replacements, + $typeAggFunc: this.driver.dialect.stringAgg ? 'string_agg' : 'max', + $typeAggParam: this.driver.dialect.stringAgg ? ", '|'" : '', + $md5Function: this.dialect?.isFipsComplianceOn ? 'LENGTH' : 'MD5', + }); return query; } @@ -138,10 +143,7 @@ class Analyser extends DatabaseAnalyser { : null; this.feedback({ analysingMessage: 'Loading routines' }); - const routines = await this.analyserQuery('routines', ['procedures', 'functions'], { - $typeAggFunc: this.driver.dialect.stringAgg ? 'string_agg' : 'max', - $typeAggParam: this.driver.dialect.stringAgg ? ", '|'" : '', - }); + const routines = await this.analyserQuery('routines', ['procedures', 'functions']); this.feedback({ analysingMessage: 'Loading indexes' }); const indexes = this.driver.__analyserInternals.skipIndexes diff --git a/plugins/dbgate-plugin-postgres/src/backend/drivers.js b/plugins/dbgate-plugin-postgres/src/backend/drivers.js index f129f019a..49047103d 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/backend/drivers.js @@ -182,6 +182,13 @@ const drivers = driverBases.map(driverBase => ({ const { rows } = await this.query(dbhan, 'SELECT version()'); const { version } = rows[0]; + let isFipsComplianceOn = false; + try { + await this.query(dbhan, "SELECT MD5('test')"); + } catch (err) { + isFipsComplianceOn = true; + } + const isCockroach = version.toLowerCase().includes('cockroachdb'); const isRedshift = version.toLowerCase().includes('redshift'); const isPostgres = !isCockroach && !isRedshift; @@ -207,6 +214,7 @@ const drivers = driverBases.map(driverBase => ({ isRedshift, versionMajor, versionMinor, + isFipsComplianceOn, }; }, async readQuery(dbhan, sql, structure) { diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/matviewModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/matviewModifications.js index abade80fd..04ed7d77b 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/matviewModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/matviewModifications.js @@ -2,7 +2,7 @@ module.exports = ` select matviewname as "pure_name", schemaname as "schema_name", - md5(definition) as "hash_code" + $md5Function(definition) as "hash_code" from pg_catalog.pg_matviews WHERE schemaname NOT LIKE 'pg_%' AND schemaname =SCHEMA_NAME_CONDITION `; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/matviews.js b/plugins/dbgate-plugin-postgres/src/backend/sql/matviews.js index 9210e4322..8bf06f053 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/matviews.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/matviews.js @@ -3,7 +3,7 @@ select matviewname as "pure_name", schemaname as "schema_name", definition as "definition", - md5(definition) as "hash_code" + $md5Function(definition) as "hash_code" from pg_catalog.pg_matviews WHERE schemaname NOT LIKE 'pg_%' and ('matviews:' || schemaname || '.' || matviewname) =OBJECT_ID_CONDITION diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js index 2b3433634..dfbd20d39 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js @@ -2,7 +2,7 @@ module.exports = ` select routine_name as "pure_name", routine_schema as "schema_name", - md5(routine_definition) as "hash_code", + $md5Function(routine_definition) as "hash_code", routine_type as "object_type" from information_schema.routines where routine_schema !~ '^_timescaledb_' diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js b/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js index bf7015297..3cfb9bf66 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js @@ -3,7 +3,7 @@ select routine_name as "pure_name", routine_schema as "schema_name", max(routine_definition) as "definition", - max(md5(routine_definition)) as "hash_code", + max($md5Function(routine_definition)) as "hash_code", routine_type as "object_type", $typeAggFunc(data_type $typeAggParam) as "data_type", max(external_language) as "language" diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js index e26388b05..dc7f526ce 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js @@ -1,7 +1,7 @@ module.exports = ` select infoTables.table_schema as "schema_name", infoTables.table_name as "pure_name", ( - select md5(string_agg( + select $md5Function(string_agg( infoColumns.column_name || '|' || infoColumns.data_type || '|' || infoColumns.is_nullable::varchar(255) || '|' || coalesce(infoColumns.character_maximum_length, -1)::varchar(255) || '|' || coalesce(infoColumns.numeric_precision, -1)::varchar(255) , ',' order by infoColumns.ordinal_position @@ -10,7 +10,7 @@ select infoTables.table_schema as "schema_name", infoTables.table_name as "pure_ where infoColumns.table_schema = infoTables.table_schema and infoColumns.table_name = infoTables.table_name ), ( - select md5(string_agg( + select $md5Function(string_agg( infoConstraints.constraint_name || '|' || infoConstraints.constraint_type , ',' order by infoConstraints.constraint_name )) as "hash_code_constraints" diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js index c23633923..da81bf963 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js @@ -2,7 +2,7 @@ module.exports = ` select table_name as "pure_name", table_schema as "schema_name", - md5(view_definition) as "hash_code" + $md5Function(view_definition) as "hash_code" from information_schema.views where table_schema != 'information_schema' and table_schema != 'pg_catalog' and table_schema !~ '^_timescaledb_' and table_schema =SCHEMA_NAME_CONDITION `; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/views.js b/plugins/dbgate-plugin-postgres/src/backend/sql/views.js index 77e502ad4..e381ad670 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/views.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/views.js @@ -3,7 +3,7 @@ select table_name as "pure_name", table_schema as "schema_name", view_definition as "create_sql", - md5(view_definition) as "hash_code" + $md5Function(view_definition) as "hash_code" from information_schema.views where table_schema !~ '^_timescaledb_' and table_schema =SCHEMA_NAME_CONDITION diff --git a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js index 708b397be..756cbb32b 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js @@ -220,6 +220,7 @@ const postgresDriver = { version.versionMajor != null && version.versionMinor != null && (version.versionMajor > 9 || version.versionMajor == 9 || version.versionMinor >= 3), + isFipsComplianceOn: version.isFipsComplianceOn, }; } return dialect;