diff --git a/backend/src/utils/tenantFullExport.ts b/backend/src/utils/tenantFullExport.ts index f508361..cbfb1b9 100644 --- a/backend/src/utils/tenantFullExport.ts +++ b/backend/src/utils/tenantFullExport.ts @@ -9,6 +9,7 @@ type TableRows = Record[]> type TableMetadata = { columns: string[] jsonColumns: Set + generatedColumns: Set } export type TenantFullExport = { @@ -37,7 +38,7 @@ const quoteIdent = (value: string) => `"${value.replace(/"/g, '""')}"` const tableColumns = async (client: any) => { const result = await client.query(` - select table_name, column_name, data_type + select table_name, column_name, data_type, is_generated from information_schema.columns where table_schema = 'public' order by table_name, ordinal_position @@ -48,12 +49,16 @@ const tableColumns = async (client: any) => { const metadata = columnsByTable.get(row.table_name) || { columns: [], jsonColumns: new Set(), + generatedColumns: new Set(), } metadata.columns.push(row.column_name) if (row.data_type === "json" || row.data_type === "jsonb") { metadata.jsonColumns.add(row.column_name) } + if (row.is_generated === "ALWAYS") { + metadata.generatedColumns.add(row.column_name) + } columnsByTable.set(row.table_name, metadata) } @@ -220,7 +225,7 @@ const insertRows = async (client: any, table: string, rows: Record[ if (!rows.length) return 0 let inserted = 0 - const availableColumns = new Set(metadata.columns) + const availableColumns = new Set(metadata.columns.filter((column) => !metadata.generatedColumns.has(column))) for (const row of rows) { const rowColumns = Object.keys(row).filter((column) => availableColumns.has(column))