migration-scripts icon indicating copy to clipboard operation
migration-scripts copied to clipboard

v3 PostgreSQL to v4 PostgreSQL Migration Data Missing

Open zbandar opened this issue 1 year ago • 2 comments

Bug report

Required System information

  • Node.js version: 16.19.1
  • NPM version: 8.19.3
  • Source Strapi version: 3.6.9
  • Target Strapi version: 4.8.2
  • Source Database: PostgreSQL
  • Target Database: PostgreSQL
  • Operating system: Ubuntu
  • Which script are you running: v3-sql-v4-sql

Describe the bug

In the strapi v3 i have tables : components_story_group_stories__stories with columns id | components_story_group_story_id | story_id components_puzzle_group_puzzles__puzzles with columns id | components_puzzle_group_puzzle_id | puzzle_id

I migrated my strapi from v3 to v4 using codemods. And pointed strapi to new empty db and generated schema. After migrating the strapi following changes happen components_story_group_stories_stories_links with the columns id | group_stories_id | story_id | story_order components_puzzle_group_puzzles_puzzles_links with columns id | group_puzzles_id | puzzle_id | puzzle_order **there are more like these tables

When i tried to migrate the data from v3 to v4 the column group_stories_id and group_puzzles_id are skipped Showing this in the console - WARNING - items of components_story_group_stories_stories_links was filtered ["group_story_id"] WARNING - items of components_puzzle_group_puzzles_puzzles_links was filtered ["group_puzzle_id"] In columns group_story_id and group_puzzle_id NULL value is showing

The other issue with the same process is no data is migarted for some tables: in v3 i have a table components_game_group_games__game_sets with columns id | components_game_group_game_id| game-set_id after migrating it to the v4 the table is renamed as components_game_group_games_game_sets_links with columns name as id | group_games_id | game_set_id | game_set_order After running the migration script the table is still empty in v4 db and data for this table is not migrated from v3 to v4.

Expected behavior

All the data should have been migrated from v3 to v4 PostgreSQL.

Screenshots

Tables in v3 image image

Tables in v4 image image

zbandar avatar Mar 30 '23 08:03 zbandar

@zbandar I am facing this issue too. Were you able to find a solution?

shobhitsinghal624 avatar Nov 02 '23 10:11 shobhitsinghal624

@zbandar @shobhitsinghal624 did you find any solutions for this ?

sawnn avatar Mar 11 '24 13:03 sawnn

Hey @shobhitsinghal624 @sawnn , we made a modification to the migrateRelations function in the file located at strapi/migration-scripts/v3-sql-v4-sql/migrate/helpers/relationHelpers.js. I updated the code starting from line 176 to the following:

for (const relation of relations) {
    if (relation.type === 'oneToOne') {
      await migrateOneToOneRelation(relation);
    } else if (relation.type === 'manyToMany') {
      const modelF = relation.modelF.replace("-", "_");
      const attribute = snakeCase(relation.attribute);
      var sourceTable = v3RelationTables.find(
        (t) =>
          t === `${relation.model}__${attribute}` ||
          t.startsWith(`${relation.model}_${attribute}__${modelF}`) ||
          (t.startsWith(`${modelF}`) && t.endsWith(`__${relation.model}_${attribute}`))
      );


      if (sourceTable) {
        await migrateManyToManyRelation(relation, sourceTable);
      }
    }
  }

This change worked for me, and I hope it proves helpful for you as well.

zbandar avatar May 09 '24 09:05 zbandar