Skip to content
This repository has been archived by the owner on Oct 7, 2024. It is now read-only.

v3 PostgreSQL to v4 PostgreSQL Migration Data Missing #95

Open
zbandar opened this issue Mar 30, 2023 · 3 comments
Open

v3 PostgreSQL to v4 PostgreSQL Migration Data Missing #95

zbandar opened this issue Mar 30, 2023 · 3 comments

Comments

@zbandar
Copy link

zbandar commented Mar 30, 2023

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

@shobhitsinghal624
Copy link

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

@sawnn
Copy link

sawnn commented Mar 11, 2024

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

@zbandar
Copy link
Author

zbandar commented May 9, 2024

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.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants