Skip to content

Commit eef826c

Browse files
authoredFeb 18, 2024
Specify columns order for pg copy (#123)
* specified columns order for pg copy * updated version to 6.1.0
1 parent 3271897 commit eef826c

5 files changed

+12
-8
lines changed
 

‎README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ Or, if you have moved <code>config</code> folder out from Nmig's directory:<br /
109109
<br /><b>Note:</b> "logs_directory" will be created during script execution.</p>
110110

111111
<h3>VERSION</h3>
112-
<p>Current version is 6.0.0</p>
112+
<p>Current version is 6.1.0</p>
113113

114114
<h3>LICENSE</h3>
115115
<p>NMIG is available under "GNU GENERAL PUBLIC LICENSE" (v. 3) <br />

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nmig",
3-
"version": "6.0.0",
3+
"version": "6.1.0",
44
"description": "The database migration app",
55
"author": "Anatoly Khaytovich<anatolyuss@gmail.com>",
66
"license": "GPL-3.0",

‎src/DataChunksProcessor.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@ export default async (
4444
true,
4545
);
4646
const logTitle = 'DataChunksProcessor::default';
47+
const arrTableColumns = (conversion._dicTables.get(tableName) as Table).arrTableColumns;
4748
const selectFieldList: string = arrangeColumnsData(
48-
(conversion._dicTables.get(tableName) as Table).arrTableColumns,
49+
arrTableColumns,
4950
+conversion._mysqlVersion.split('.').slice(0, 2).join('.'),
5051
conversion._encoding,
5152
);
@@ -72,8 +73,11 @@ export default async (
7273

7374
const metadata: string = JSON.stringify({
7475
_tableName: tableName,
75-
_selectFieldList: selectFieldList,
7676
_rowsCnt: rowsCnt,
77+
_selectFieldList: selectFieldList,
78+
_copyColumnNamesList: arrTableColumns
79+
.map((column: any): string => `"${column.Field}"`)
80+
.join(','),
7781
});
7882

7983
params.sql = `INSERT INTO ${getDataPoolTableName(conversion)}("metadata") VALUES ($1);`;

‎src/DataPipeManager.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export default class DataPipeManager {
187187
DataPipeManager.getNumberOfReaderProcesses(conversion);
188188

189189
// !!!Note, invoke the "DataPipeManager.runDataReaderProcess" method sequentially.
190-
// DO NOT use ".map(async _ => await DataPipeManager.runDataReaderProcess(..." to avoid race condition.
190+
// DO NOT use ".map(async _ => await DataPipeManager.runDataReaderProcess(...))" to avoid race condition.
191191
for (let i = 0; i < numberOfReaderProcesses; ++i) {
192192
await DataPipeManager.runDataReaderProcess(conversion);
193193
}

‎src/DataReader.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,14 @@ process.on('message', async (signal: MessageToDataReader): Promise<void> => {
7474
const populateTable = async (conv: Conversion, chunk: any): Promise<void> => {
7575
const tableName: string = chunk._tableName;
7676
const strSelectFieldList: string = chunk._selectFieldList;
77+
const copyColumnNamesList: string = chunk._copyColumnNamesList;
7778
const rowsCnt: number = chunk._rowsCnt;
7879
const dataPoolId: number = chunk._id;
7980
const originalTableName: string = extraConfigProcessor.getTableName(conv, tableName, true);
8081
const sql = `SELECT ${strSelectFieldList} FROM \`${originalTableName}\`;`;
8182
const mysqlClient: PoolConnection = await DBAccess.getMysqlClient(conv);
82-
const sqlCopy = `COPY "${conv._schema}"."${tableName}" FROM STDIN
83-
WITH(FORMAT csv, DELIMITER '${conv._delimiter}',
84-
ENCODING '${conv._targetConString.charset}');`;
83+
const sqlCopy = `COPY "${conv._schema}"."${tableName}" (${copyColumnNamesList}) FROM STDIN
84+
WITH (FORMAT csv, DELIMITER '${conv._delimiter}', ENCODING '${conv._targetConString.charset}');`;
8585

8686
const client: PoolClient = await DBAccess.getPgClient(conv);
8787
let originalSessionReplicationRole: string | null = null;

0 commit comments

Comments
 (0)
Please sign in to comment.