From a324cf0fcd872c15b5f2aefe831f2b22245934e4 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Mon, 3 Nov 2025 16:56:58 +0100 Subject: [PATCH] Column name collision resolving #1234 for postgres - commented out (not working) --- packages/tools/src/nameTools.ts | 11 ++++++++--- .../src/backend/drivers.js | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/tools/src/nameTools.ts b/packages/tools/src/nameTools.ts index 346d86a85..e9bf3c26d 100644 --- a/packages/tools/src/nameTools.ts +++ b/packages/tools/src/nameTools.ts @@ -76,11 +76,16 @@ export function findForeignKeyForColumn(table: TableInfo, column: ColumnInfo | s return (table.foreignKeys || []).find(fk => fk.columns.find(col => col.columnName == column.columnName)); } +export function getConflictingColumnNames(columns: ColumnInfo[]): Set { + const conflictingNames = new Set( + _uniq(columns.map(x => x.columnName).filter((item, index, arr) => arr.indexOf(item) !== index)) + ); + return conflictingNames; +} + export function makeUniqueColumnNames(res: ColumnInfo[]) { const usedNames = new Set(); - const conflictingNames = new Set( - _uniq(res.map(x => x.columnName).filter((item, index, arr) => arr.indexOf(item) !== index)) - ); + const conflictingNames = getConflictingColumnNames(res); for (let i = 0; i < res.length; i++) { if ( conflictingNames.has(res[i].columnName) && diff --git a/plugins/dbgate-plugin-postgres/src/backend/drivers.js b/plugins/dbgate-plugin-postgres/src/backend/drivers.js index bf75c1518..4e079f3ea 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/backend/drivers.js @@ -13,6 +13,7 @@ const { makeUniqueColumnNames, extractDbNameFromComposite, extractErrorLogData, + getConflictingColumnNames, } = global.DBGATE_PACKAGES['dbgate-tools']; let authProxy; @@ -60,7 +61,23 @@ function extractPostgresColumns(result, dbhan) { columnName: fld.name, dataTypeId: fld.dataTypeID, dataTypeName: typeIdToName[fld.dataTypeID], + tableId: fld.tableID, })); + + // const conflictingNames = getConflictingColumnNames(res); + // if (conflictingNames.size > 0) { + // const requiredTableIds = res.filter(x => conflictingNames.has(x.columnName)).map(x => x.tableId); + // const tableIdResult = await dbhan.client.query( + // `SELECT DISTINCT c.oid AS table_id, c.relname AS table_name + // FROM pg_class c + // WHERE c.oid IN (${requiredTableIds.join(',')})` + // ); + // const tableIdToTableName = _.fromPairs(tableIdResult.rows.map(cur => [cur.table_id, cur.table_name])); + // for (const col of res) { + // col.pureName = tableIdToTableName[col.tableId]; + // } + // } + makeUniqueColumnNames(res); return res; }