@ingeno/pipedream-services 1.0.69 → 1.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collections/converter.d.ts.map +1 -1
- package/dist/collections/converter.js +11 -12
- package/dist/collections/converter.js.map +1 -1
- package/dist/collections/types.d.ts +2 -0
- package/dist/collections/types.d.ts.map +1 -1
- package/dist/google-sheets/google-sheets-to-database.d.ts +17 -0
- package/dist/google-sheets/google-sheets-to-database.d.ts.map +1 -0
- package/dist/google-sheets/google-sheets-to-database.js +55 -0
- package/dist/google-sheets/google-sheets-to-database.js.map +1 -0
- package/dist/google-sheets/index.d.ts +1 -0
- package/dist/google-sheets/index.d.ts.map +1 -1
- package/dist/google-sheets/index.js +1 -0
- package/dist/google-sheets/index.js.map +1 -1
- package/dist/postgres/postgres.d.ts.map +1 -1
- package/dist/postgres/postgres.js +30 -7
- package/dist/postgres/postgres.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/collections/converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/collections/converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,YAAY,CAAA;AA6FpD,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,EAAE,OAAO,GAAG,KAAG,GAiDpD,CAAA"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
// Type Guards
|
|
2
1
|
const isString = (value) => typeof value === 'string' || value instanceof String;
|
|
3
2
|
const isNullOrUndefined = (value) => value === null || value === undefined;
|
|
4
3
|
const isDateType = (type) => ['datetime', 'date'].includes(type);
|
|
5
4
|
const isNumericType = (type) => ['number', 'currency'].includes(type);
|
|
6
|
-
|
|
7
|
-
const validateAndReturnJsonString = (value, columnName) => {
|
|
5
|
+
const validateJsonString = (value, columnName) => {
|
|
8
6
|
try {
|
|
9
7
|
JSON.parse(value);
|
|
10
8
|
return value;
|
|
@@ -25,11 +23,10 @@ const serializeToJson = (value, columnName) => {
|
|
|
25
23
|
};
|
|
26
24
|
const convertJsonValue = (value, columnName) => {
|
|
27
25
|
if (isString(value)) {
|
|
28
|
-
return
|
|
26
|
+
return validateJsonString(value, columnName);
|
|
29
27
|
}
|
|
30
28
|
return serializeToJson(value, columnName);
|
|
31
29
|
};
|
|
32
|
-
// Date Conversion Functions
|
|
33
30
|
const parseDate = (value, columnName) => {
|
|
34
31
|
try {
|
|
35
32
|
const dateObj = new Date(value);
|
|
@@ -45,13 +42,10 @@ const parseDate = (value, columnName) => {
|
|
|
45
42
|
}
|
|
46
43
|
};
|
|
47
44
|
const convertDateValue = (value, columnName) => {
|
|
48
|
-
// Handle Date objects - return as-is
|
|
49
45
|
if (value instanceof Date) {
|
|
50
46
|
return value;
|
|
51
47
|
}
|
|
52
|
-
// Handle non-string values
|
|
53
48
|
if (typeof value === 'number') {
|
|
54
|
-
// For numeric values, return null to avoid timestamp errors
|
|
55
49
|
console.warn(`Numeric value "${value}" found for date column "${columnName}", setting to null`);
|
|
56
50
|
return null;
|
|
57
51
|
}
|
|
@@ -61,20 +55,25 @@ const convertDateValue = (value, columnName) => {
|
|
|
61
55
|
}
|
|
62
56
|
return parseDate(value, columnName);
|
|
63
57
|
};
|
|
64
|
-
|
|
58
|
+
const stripNonNumericCharacters = (value) => value
|
|
59
|
+
.replace(/[$,\s]/g, '')
|
|
60
|
+
.replace(/[^\d.-]/g, '');
|
|
65
61
|
const convertNumericValue = (value) => {
|
|
62
|
+
if (typeof value === 'number') {
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
if (typeof value === 'string') {
|
|
66
|
+
return parseFloat(stripNonNumericCharacters(value));
|
|
67
|
+
}
|
|
66
68
|
return parseFloat(value);
|
|
67
69
|
};
|
|
68
|
-
// Boolean Conversion Functions
|
|
69
70
|
const convertBooleanValue = (value) => {
|
|
70
71
|
return ['true', 'yes'].includes(value.toLowerCase());
|
|
71
72
|
};
|
|
72
|
-
// String Preprocessing
|
|
73
73
|
const preprocessStringValue = (value) => {
|
|
74
74
|
const trimmed = value.trim();
|
|
75
75
|
return trimmed === '' ? undefined : trimmed;
|
|
76
76
|
};
|
|
77
|
-
// Main Conversion Function
|
|
78
77
|
export const convert = (column, value) => {
|
|
79
78
|
const type = column.type || 'string';
|
|
80
79
|
// Early return for null/undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/collections/converter.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/collections/converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,13 @@ export interface Column {
|
|
|
5
5
|
type?: ColumnType;
|
|
6
6
|
path?: string;
|
|
7
7
|
transform?: (record: any) => any;
|
|
8
|
+
unique?: boolean;
|
|
8
9
|
}
|
|
9
10
|
export interface CollectionSchema {
|
|
10
11
|
name: string;
|
|
11
12
|
prepareMode?: PrepareMode;
|
|
12
13
|
columns: Column[];
|
|
14
|
+
upsertKey?: string;
|
|
13
15
|
}
|
|
14
16
|
export type CollectionObjects = any[];
|
|
15
17
|
export interface Collection {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/collections/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;AACvD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;AAEjH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/collections/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;AACvD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;AAEjH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAA;IAChC,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAA;AAErC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,GAAG,EAAE,CAAA;CACf;AAED,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAEvD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAA;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,gBAAgB,CAAA;IACxB,IAAI,EAAE,GAAG,EAAE,EAAE,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAA;IACxB,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;CACxB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ColumnType, PrepareMode } from '../collections/types.js';
|
|
2
|
+
import { type GoogleSheetsCredentials } from './google-sheets-service.js';
|
|
3
|
+
import { type PostgresAuth } from '../postgres/postgres.js';
|
|
4
|
+
export interface GoogleSheetsToDatabaseOptions {
|
|
5
|
+
googleSheets: GoogleSheetsCredentials;
|
|
6
|
+
postgresql: PostgresAuth;
|
|
7
|
+
spreadsheetId: string;
|
|
8
|
+
sheetName: string;
|
|
9
|
+
range: string;
|
|
10
|
+
tableName: string;
|
|
11
|
+
tablesPrefix: string;
|
|
12
|
+
columnTypeDetector?: (columnName: string) => ColumnType;
|
|
13
|
+
prepareMode?: PrepareMode;
|
|
14
|
+
uniqueKey?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const syncGoogleSheetToDatabase: (options: GoogleSheetsToDatabaseOptions) => Promise<void>;
|
|
17
|
+
//# sourceMappingURL=google-sheets-to-database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-sheets-to-database.d.ts","sourceRoot":"","sources":["../../src/google-sheets/google-sheets-to-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwC,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC5G,OAAO,EAAuB,KAAK,uBAAuB,EAAkC,MAAM,4BAA4B,CAAA;AAC9H,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAGvE,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,uBAAuB,CAAA;IACrC,UAAU,EAAE,YAAY,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,UAAU,CAAA;IACvD,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiDD,eAAO,MAAM,yBAAyB,GAAU,SAAS,6BAA6B,KAAG,OAAO,CAAC,IAAI,CAkCpG,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { GoogleSheetsService } from './google-sheets-service.js';
|
|
2
|
+
import { fillTables } from '../postgres/postgres.js';
|
|
3
|
+
import { collectionArrayToTableRowArray } from '../collections/collections-to-table.js';
|
|
4
|
+
const normalizeColumnName = (value) => value?.toLowerCase()
|
|
5
|
+
.replace(/[()]+/g, '')
|
|
6
|
+
.replace(/[^a-zA-Z0-9]+/g, '_');
|
|
7
|
+
const defaultColumnTypeDetector = (columnName) => {
|
|
8
|
+
return 'text';
|
|
9
|
+
};
|
|
10
|
+
const createCollectionFromSheetData = (sheetData, tableName, columnTypeDetector, prepareMode = 'drop', uniqueKey) => {
|
|
11
|
+
if (!sheetData || sheetData.length === 0) {
|
|
12
|
+
throw new Error('No data found in sheet');
|
|
13
|
+
}
|
|
14
|
+
const [rawHeaders, ...rows] = sheetData;
|
|
15
|
+
const headers = rawHeaders.map(normalizeColumnName);
|
|
16
|
+
const columns = headers.map(header => ({
|
|
17
|
+
name: header,
|
|
18
|
+
type: columnTypeDetector(header),
|
|
19
|
+
unique: header === uniqueKey
|
|
20
|
+
}));
|
|
21
|
+
const schema = {
|
|
22
|
+
name: tableName,
|
|
23
|
+
prepareMode,
|
|
24
|
+
columns,
|
|
25
|
+
...(uniqueKey && { upsertKey: uniqueKey })
|
|
26
|
+
};
|
|
27
|
+
const objects = rows.map((row) => {
|
|
28
|
+
const obj = {};
|
|
29
|
+
headers.forEach((header, headerIndex) => {
|
|
30
|
+
obj[header] = row[headerIndex] || '';
|
|
31
|
+
});
|
|
32
|
+
return obj;
|
|
33
|
+
});
|
|
34
|
+
return { schema, objects };
|
|
35
|
+
};
|
|
36
|
+
export const syncGoogleSheetToDatabase = async (options) => {
|
|
37
|
+
const { googleSheets, postgresql, spreadsheetId, sheetName, range = 'A1:Z1000', tableName, tablesPrefix, columnTypeDetector = defaultColumnTypeDetector, prepareMode = 'drop', uniqueKey } = options;
|
|
38
|
+
const googleSheetsService = new GoogleSheetsService(googleSheets);
|
|
39
|
+
const { values: sheetData } = await googleSheetsService.readSpreadsheetTab({
|
|
40
|
+
spreadsheetId,
|
|
41
|
+
sheetName,
|
|
42
|
+
range
|
|
43
|
+
});
|
|
44
|
+
if (!sheetData || sheetData.length === 0) {
|
|
45
|
+
throw new Error('No data found in sheet');
|
|
46
|
+
}
|
|
47
|
+
const collection = createCollectionFromSheetData(sheetData, tableName, columnTypeDetector, prepareMode, uniqueKey);
|
|
48
|
+
const tableRowsArray = collectionArrayToTableRowArray([collection]);
|
|
49
|
+
await fillTables({
|
|
50
|
+
auth: postgresql,
|
|
51
|
+
tablesRows: tableRowsArray,
|
|
52
|
+
tablesPrefix
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=google-sheets-to-database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-sheets-to-database.js","sourceRoot":"","sources":["../../src/google-sheets/google-sheets-to-database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/google-sheets/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/google-sheets/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/google-sheets/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/google-sheets/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/postgres/postgres.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAoB,MAAM,yBAAyB,CAAA;AAI1F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,YAAY,CAAA;IAClB,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAQD,eAAO,MAAM,UAAU,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAWxE,CAAA;
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/postgres/postgres.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAoB,MAAM,yBAAyB,CAAA;AAI1F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,YAAY,CAAA;IAClB,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAQD,eAAO,MAAM,UAAU,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAWxE,CAAA;AA2OD,eAAO,MAAM,qBAAqB,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,IAAI,CA4BzF,CAAA"}
|
|
@@ -46,7 +46,7 @@ const executeQuery = async (client, query, values) => {
|
|
|
46
46
|
const buildColumnDefinition = (column) => {
|
|
47
47
|
const columnName = buildColumnName(column.name);
|
|
48
48
|
const sqlType = mapColumnTypeToSql(column.type);
|
|
49
|
-
const uniqueConstraint = column.name === 'id' ? ' UNIQUE' : '';
|
|
49
|
+
const uniqueConstraint = (column.name === 'id' || column.unique) ? ' UNIQUE' : '';
|
|
50
50
|
return ` "${columnName}" ${sqlType}${uniqueConstraint}`;
|
|
51
51
|
};
|
|
52
52
|
const buildCreateTableQuery = (tablePrefix, schema) => {
|
|
@@ -87,14 +87,18 @@ const buildPlaceholders = (batch) => {
|
|
|
87
87
|
})
|
|
88
88
|
.join(', ');
|
|
89
89
|
};
|
|
90
|
-
const buildUpsertQuery = (tableName, columnNames, updateClause, placeholders) => `INSERT INTO ${tableName} (${columnNames})\n VALUES ${placeholders}\n ON CONFLICT (
|
|
91
|
-
const
|
|
90
|
+
const buildUpsertQuery = (tableName, columnNames, updateClause, placeholders, conflictColumn = 'ID') => `INSERT INTO ${tableName} (${columnNames})\n VALUES ${placeholders}\n ON CONFLICT ("${conflictColumn.toLowerCase()}") DO UPDATE SET ${updateClause}`;
|
|
91
|
+
const buildInsertQuery = (tableName, columnNames, placeholders) => `INSERT INTO ${tableName} (${columnNames})\n VALUES ${placeholders}`;
|
|
92
|
+
const insertBatch = async (client, tableName, columnNames, updateClause, batch, conflictColumn) => {
|
|
92
93
|
if (batch.length === 0)
|
|
93
94
|
return;
|
|
94
95
|
const placeholders = buildPlaceholders(batch);
|
|
95
|
-
const query =
|
|
96
|
+
const query = conflictColumn
|
|
97
|
+
? buildUpsertQuery(tableName, columnNames, updateClause, placeholders, conflictColumn)
|
|
98
|
+
: buildInsertQuery(tableName, columnNames, placeholders);
|
|
96
99
|
const values = batch.flat();
|
|
97
|
-
|
|
100
|
+
const operation = conflictColumn ? 'upserting' : 'inserting';
|
|
101
|
+
console.log(`Batch ${operation} ${batch.length} rows into '${tableName}'`);
|
|
98
102
|
await executeQuery(client, query, values);
|
|
99
103
|
};
|
|
100
104
|
const buildColumnNames = (columns) => columns.map(column => `"${buildColumnName(column.name)}"`).join(', ');
|
|
@@ -113,18 +117,35 @@ const logPerformanceMetrics = (rowCount, duration, tableName) => {
|
|
|
113
117
|
const rowsPerSecond = Math.round(rowCount / (duration / 1000));
|
|
114
118
|
console.log(`Done streaming ${rowCount} rows into table '${tableName}' in ${duration}ms (${rowsPerSecond} rows/sec)`);
|
|
115
119
|
};
|
|
120
|
+
const getUniqueColumnName = (schema) => {
|
|
121
|
+
// Skip conflict resolution for modes that clear all data anyway
|
|
122
|
+
if (schema.prepareMode === 'drop' || schema.prepareMode === 'deleteAll') {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
if (schema.upsertKey) {
|
|
126
|
+
return buildColumnName(schema.upsertKey);
|
|
127
|
+
}
|
|
128
|
+
const uniqueColumn = schema.columns.find(col => col.unique);
|
|
129
|
+
if (uniqueColumn) {
|
|
130
|
+
return buildColumnName(uniqueColumn.name);
|
|
131
|
+
}
|
|
132
|
+
// Check if 'id' column actually exists in the schema
|
|
133
|
+
const hasIdColumn = schema.columns.some(col => col.name === 'id');
|
|
134
|
+
return hasIdColumn ? 'id' : null;
|
|
135
|
+
};
|
|
116
136
|
const insertTableDataFromStream = async (pool, tablePrefix, batchSize, batchConcurrency, { schema, rows }) => {
|
|
117
137
|
const startTime = Date.now();
|
|
118
138
|
const tableName = buildTableName(tablePrefix, schema);
|
|
119
139
|
const columnNames = buildColumnNames(schema.columns);
|
|
120
140
|
const updateClause = buildUpdateClause(schema.columns);
|
|
141
|
+
const conflictColumn = getUniqueColumnName(schema);
|
|
121
142
|
console.log(`Streaming data into table '${tableName}' using batch size ${batchSize}`);
|
|
122
143
|
let processedRows = 0;
|
|
123
144
|
await lastValueFrom(rows.pipe(bufferCount(batchSize), mergeMap(async (batch) => {
|
|
124
145
|
const client = await pool.connect();
|
|
125
146
|
try {
|
|
126
147
|
await executeInTransaction(client, async () => {
|
|
127
|
-
await insertBatch(client, tableName, columnNames, updateClause, batch);
|
|
148
|
+
await insertBatch(client, tableName, columnNames, updateClause, batch, conflictColumn || undefined);
|
|
128
149
|
});
|
|
129
150
|
processedRows += batch.length;
|
|
130
151
|
logProgress(processedRows, batchSize);
|
|
@@ -171,7 +192,9 @@ export const fillTablesFromStreams = async (options) => {
|
|
|
171
192
|
const { auth, tableRowStreams, tablesPrefix, batchSize = 1000, poolSize = 10, batchConcurrency = 3 } = options;
|
|
172
193
|
const pool = new Pool({
|
|
173
194
|
...auth,
|
|
174
|
-
max: poolSize
|
|
195
|
+
max: poolSize,
|
|
196
|
+
// Allow process to exit when pool is idle - prevents hanging processes
|
|
197
|
+
allowExitOnIdle: true
|
|
175
198
|
});
|
|
176
199
|
console.log(`Processing ${tableRowStreams.length} table streams with pool size ${poolSize}`);
|
|
177
200
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/postgres/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,WAAW,EAAa,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAI1C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AA0BnB,MAAM,yBAAyB,GAAG,CAAC,UAAuB,EAAoB,EAAE,CAC9E,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,MAAM;IACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;CACjB,CAAC,CAAC,CAAA;AAEL,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAAyB,EAAiB,EAAE;IAC3E,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAE7D,MAAM,eAAe,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAA;IAE7D,MAAM,qBAAqB,CAAC;QAC1B,IAAI;QACJ,eAAe;QACf,YAAY;QACZ,SAAS;KACV,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG;IACxB,EAAE,EAAE,eAAe;IACnB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,eAAe;IACvB,QAAQ,EAAE,gBAAgB;IAC1B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,MAAM;CACJ,CAAA;AAEV,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,MAAwB,EAAU,EAAE,CAC1E,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAA;AAEzC,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAU,EAAE,CACrD,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;AAEzD,MAAM,kBAAkB,GAAG,CAAC,aAAqB,QAAQ,EAAU,EAAE,CACnE,iBAAiB,CAAC,UAA4C,CAAC,IAAI,MAAM,CAAA;AAE3E,MAAM,YAAY,GAAG,KAAK,EAAE,MAAqB,EAAE,KAAa,EAAE,MAAkB,EAAiB,EAAE;IACrG,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAA;QAC/C,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAClC,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAAC,MAAW,EAAU,EAAE;IACpD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/postgres/postgres.ts"],"names":[],"mappings":"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"}
|