Skip to content

Commit 7c0e016

Browse files
committed
Merge branch 'release/v5.0.1'
2 parents b347e22 + f0271a0 commit 7c0e016

File tree

8 files changed

+33
-25
lines changed

8 files changed

+33
-25
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ from MySQL to PostgreSQL as easy and smooth as possible.</p>
8787
<b>Note:</b> "logs_directory" will be created during script execution.</p>
8888

8989
<h3>VERSION</h3>
90-
<p>Current version is 5.0.0<br />
90+
<p>Current version is 5.0.1<br />
9191
(major version . improvements . bug fixes)</p>
9292

9393
<h3>KNOWN ISSUES</h3>

config/config.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,9 @@
8383

8484
"migrate_only_data_description" : [
8585
"In order to skip schema migration, and just migrate data into a preset tables",
86-
"fill following array with preset table names.",
87-
"If all of your tables are preset, then use '*'"
86+
" - set this parameter true."
8887
],
89-
"migrate_only_data" : [],
88+
"migrate_only_data" : false,
9089

9190
"delimiter_description" : [
9291
"Specifies the character, that separates columns within each record.",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nmig",
3-
"version": "5.0.0",
3+
"version": "5.0.1",
44
"description": "The database migration app",
55
"author": "Anatoly Khaytovich<[email protected]>",
66
"license": "GPL-3.0",

src/ConstraintsProcessor.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ import Conversion from './Conversion';
3737
*/
3838
export default async function(conversion: Conversion): Promise<void> {
3939
const isTableConstraintsLoaded: boolean = await migrationStateManager.get(conversion, 'per_table_constraints_loaded');
40+
const migrateOnlyData: boolean = conversion.shouldMigrateOnlyData();
4041

4142
const promises: Promise<void>[] = conversion._tablesToMigrate.map(async (tableName: string) => {
4243
if (!isTableConstraintsLoaded) {
43-
if (conversion.shouldMigrateOnlyDataFor(tableName)) {
44+
if (migrateOnlyData) {
4445
return sequencesProcessor.setSequenceValue(conversion, tableName);
4546
}
4647

@@ -54,13 +55,21 @@ export default async function(conversion: Conversion): Promise<void> {
5455
});
5556

5657
await Promise.all(promises);
57-
await migrationStateManager.set(conversion, 'per_table_constraints_loaded');
58-
await processForeignKey(conversion);
59-
await migrationStateManager.set(conversion, 'foreign_keys_loaded');
58+
59+
if (migrateOnlyData) {
60+
await migrationStateManager.set(conversion, 'per_table_constraints_loaded', 'foreign_keys_loaded', 'views_loaded');
61+
} else {
62+
await migrationStateManager.set(conversion, 'per_table_constraints_loaded');
63+
await processForeignKey(conversion);
64+
await migrationStateManager.set(conversion, 'foreign_keys_loaded');
65+
await processViews(conversion);
66+
await migrationStateManager.set(conversion, 'views_loaded');
67+
}
68+
69+
await runVacuumFullAndAnalyze(conversion); // Reclaim storage occupied by dead tuples.
70+
71+
// !!!Note, dropping of data-pool and state-logs tables MUST be the last step of migration process.
6072
await dataPoolManager.dropDataPoolTable(conversion);
61-
await processViews(conversion);
62-
await migrationStateManager.set(conversion, 'views_loaded');
63-
await runVacuumFullAndAnalyze(conversion);
6473
await migrationStateManager.dropStateLogsTable(conversion);
6574
generateReport(conversion, 'NMIG migration is accomplished.');
6675
}

src/Conversion.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,9 @@ export default class Conversion {
7171
public readonly _delimiter: string;
7272

7373
/**
74-
* Defines preset tables.
75-
* The only thing to do with these tables is a data migration, since the schema is preset.
74+
* Indicates if the schema in the target database is preset.
7675
*/
77-
public readonly _migrateOnlyData: string[];
76+
public readonly _migrateOnlyData: boolean;
7877

7978
/**
8079
* A path to the "logs_directory".
@@ -231,17 +230,17 @@ export default class Conversion {
231230
this._maxDbConnectionPoolSize = this._maxDbConnectionPoolSize > 0 ? this._maxDbConnectionPoolSize : 10;
232231
this._loaderMaxOldSpaceSize = this._config.loader_max_old_space_size;
233232
this._loaderMaxOldSpaceSize = Conversion._isIntNumeric(this._loaderMaxOldSpaceSize) ? this._loaderMaxOldSpaceSize : 'DEFAULT';
234-
this._migrateOnlyData = this._config.migrate_only_data === undefined ? [] : this._config.migrate_only_data;
233+
this._migrateOnlyData = this._config.migrate_only_data === undefined ? false : this._config.migrate_only_data;
235234
this._delimiter = this._config.delimiter !== undefined && this._config.delimiter.length === 1
236235
? this._config.delimiter
237236
: ',';
238237
}
239238

240239
/**
241-
* Checks if there are actions to take on given table other than data migration.
240+
* Checks if there are actions to take other than data migration.
242241
*/
243-
public shouldMigrateOnlyDataFor(tableName: string): boolean {
244-
return this._migrateOnlyData.indexOf(tableName) !== -1 || this._migrateOnlyData.indexOf('*') !== -1;
242+
public shouldMigrateOnlyData(): boolean {
243+
return this._migrateOnlyData;
245244
}
246245

247246
/**

src/DataLoader.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ async function deleteChunk(
6969
originalSessionReplicationRole: string | null = null
7070
): Promise<void> {
7171
const sql: string = `DELETE FROM "${ conversion._schema }"."data_pool_${ conversion._schema }${ conversion._mySqlDbName }" WHERE id = ${ dataPoolId };`;
72-
const dbAccess: DBAccess = new DBAccess(conversion);
7372

7473
try {
7574
await client.query(sql);
@@ -80,6 +79,7 @@ async function deleteChunk(
8079
} catch (error) {
8180
await generateError(conversion, `\t--[DataLoader::deleteChunk] ${ error }`, sql);
8281
} finally {
82+
const dbAccess: DBAccess = new DBAccess(conversion);
8383
await dbAccess.releaseDbClient(client);
8484
}
8585
}
@@ -122,7 +122,7 @@ async function populateTableWorker(
122122
const client: PoolClient = await dbAccess.getPgClient();
123123
let originalSessionReplicationRole: string | null = null;
124124

125-
if (conv.shouldMigrateOnlyDataFor(tableName)) {
125+
if (conv.shouldMigrateOnlyData()) {
126126
originalSessionReplicationRole = await disableTriggers(conv, client);
127127
}
128128

src/MigrationStateManager.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ export async function get(conversion: Conversion, param: string): Promise<boolea
3737
/**
3838
* Updates the state-log.
3939
*/
40-
export async function set(conversion: Conversion, param: string): Promise<void> {
40+
export async function set(conversion: Conversion, ...states: string[]): Promise<void> {
41+
const statesSql: string = states.map((state: string) => `${ state } = TRUE`).join(',');
42+
const sql: string = `UPDATE "${ conversion._schema }"."state_logs_${ conversion._schema }${ conversion._mySqlDbName }" SET ${ statesSql };`;
4143
const dbAccess: DBAccess = new DBAccess(conversion);
42-
const sql: string = `UPDATE "${ conversion._schema }"."state_logs_${ conversion._schema }${ conversion._mySqlDbName }" SET ${ param } = TRUE;`;
4344
await dbAccess.query('MigrationStateManager::set', sql, DBVendors.PG, true, false);
4445
}
4546

@@ -57,7 +58,7 @@ export async function createStateLogsTable(conversion: Conversion): Promise<Conv
5758

5859
if (+result.data.rows[0].cnt === 0) {
5960
sql = `INSERT INTO "${ conversion._schema }"."state_logs_${ conversion._schema }${ conversion._mySqlDbName }" VALUES (FALSE, FALSE, FALSE, FALSE);`;
60-
await await dbAccess.query('MigrationStateManager::createStateLogsTable', sql, DBVendors.PG, true, false, result.client);
61+
await dbAccess.query('MigrationStateManager::createStateLogsTable', sql, DBVendors.PG, true, false, result.client);
6162
return conversion;
6263
}
6364

src/TableProcessor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export async function createTable(conversion: Conversion, tableName: string): Pr
8787

8888
conversion._dicTables[tableName].arrTableColumns = columns.data;
8989

90-
if (conversion.shouldMigrateOnlyDataFor(tableName)) {
90+
if (conversion.shouldMigrateOnlyData()) {
9191
return;
9292
}
9393

0 commit comments

Comments
 (0)