Database migration error during upgrade/server migration

41 views
Skip to first unread message

J.A

unread,
Oct 18, 2024, 5:40:31 AM10/18/24
to DSpace Technical Support
Hello

I was in the process of upgrading DSpace-CRIS from 2022.01.01 to 2023.02.05. We decided to migrate to another server instead of upgrading the existing installation. I was following the migration guide here and all went well until i ran './dspace database migrate' i got this error:
Migration exception:
java.sql.SQLException: Flyway migration error occurred
        at org.dspace.storage.rdbms.DatabaseUtils.updateDatabase(DatabaseUtils.java:766)
        at org.dspace.storage.rdbms.DatabaseUtils.updateDatabase(DatabaseUtils.java:651)
        at org.dspace.storage.rdbms.DatabaseUtils.updateDatabase(DatabaseUtils.java:646)
        at org.dspace.storage.rdbms.DatabaseUtils.main(DatabaseUtils.java:239)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.dspace.app.launcher.ScriptLauncher.runOneCommand(ScriptLauncher.java:303)
        at org.dspace.app.launcher.ScriptLauncher.handleScript(ScriptLauncher.java:153)
        at org.dspace.app.launcher.ScriptLauncher.handleScript(ScriptLauncher.java:125)
        at org.dspace.app.launcher.ScriptLauncher.main(ScriptLauncher.java:100)
Caused by: org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: Migration V7.6_2024.04.23__alter_table_process_add_foreign_key_on_user_id.sql failed
------------------------------------------------------------------------------------
SQL State  : 23503
Error Code : 0
Message    : ERROR: insert or update on table "process" violates foreign key constraint "user_id"
  Detail: Key (user_id)=(517679f6-cbea-4519-b491-15886e069196) is not present in table "eperson".
Location   : org/dspace/storage/rdbms/sqlmigration/postgres/V7.6_2024.04.23__alter_table_process_add_foreign_key_on_user_id.sql (/opt/clean-sever/bin/file:/opt/clean-sever/lib/dspace-api-cris-2023.02.05.jar!/org/dspace/storage/rdbms/sqlmigration/postgres/V7.6_2024.04.23__alter_table_process_add_foreign_key_on_user_id.sql)
Line       : 17
Statement  : -- Add the foreign key constraint with ON DELETE SET NULL
ALTER TABLE process ADD CONSTRAINT user_id FOREIGN KEY (user_id) REFERENCES eperson (uuid) ON DELETE SET NULL

        at org.flywaydb.core.internal.command.DbMigrate.doMigrateGroup(DbMigrate.java:385)
        at org.flywaydb.core.internal.command.DbMigrate.lambda$applyMigrations$1(DbMigrate.java:275)
        at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:55)
        at org.flywaydb.core.internal.command.DbMigrate.applyMigrations(DbMigrate.java:274)
        at org.flywaydb.core.internal.command.DbMigrate.migrateGroup(DbMigrate.java:247)
        at org.flywaydb.core.internal.command.DbMigrate.lambda$migrateAll$0(DbMigrate.java:141)
        at org.flywaydb.core.internal.database.postgresql.PostgreSQLAdvisoryLockTemplate.execute(PostgreSQLAdvisoryLockTemplate.java:69)
        at org.flywaydb.core.internal.database.postgresql.PostgreSQLConnection.lock(PostgreSQLConnection.java:99)
        at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.lock(JdbcTableSchemaHistory.java:139)
        at org.flywaydb.core.internal.command.DbMigrate.migrateAll(DbMigrate.java:141)
        at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:98)
        at org.flywaydb.core.Flyway$1.execute(Flyway.java:173)
        at org.flywaydb.core.Flyway$1.execute(Flyway.java:124)
        at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:214)
        at org.flywaydb.core.Flyway.migrate(Flyway.java:124)
        at org.dspace.storage.rdbms.DatabaseUtils.updateDatabase(DatabaseUtils.java:753)
        ... 11 more
Caused by: org.flywaydb.core.internal.sqlscript.FlywaySqlScriptException: Migration V7.6_2024.04.23__alter_table_process_add_foreign_key_on_user_id.sql failed
------------------------------------------------------------------------------------
SQL State  : 23503
Error Code : 0
Message    : ERROR: insert or update on table "process" violates foreign key constraint "user_id"
  Detail: Key (user_id)=(517679f6-cbea-4519-b491-15886e069196) is not present in table "eperson".
Location   : org/dspace/storage/rdbms/sqlmigration/postgres/V7.6_2024.04.23__alter_table_process_add_foreign_key_on_user_id.sql (/opt/clean-sever/bin/file:/opt/clean-sever/lib/dspace-api-cris-2023.02.05.jar!/org/dspace/storage/rdbms/sqlmigration/postgres/V7.6_2024.04.23__alter_table_process_add_foreign_key_on_user_id.sql)
Line       : 17
Statement  : -- Add the foreign key constraint with ON DELETE SET NULL
ALTER TABLE process ADD CONSTRAINT user_id FOREIGN KEY (user_id) REFERENCES eperson (uuid) ON DELETE SET NULL

        at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.handleException(DefaultSqlScriptExecutor.java:275)
        at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.executeStatement(DefaultSqlScriptExecutor.java:222)
        at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.execute(DefaultSqlScriptExecutor.java:126)
        at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.executeOnce(SqlMigrationExecutor.java:69)
        at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.lambda$execute$0(SqlMigrationExecutor.java:58)
        at org.flywaydb.core.internal.database.DefaultExecutionStrategy.execute(DefaultExecutionStrategy.java:27)
        at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:57)
        at org.flywaydb.core.internal.command.DbMigrate.doMigrateGroup(DbMigrate.java:377)
        ... 26 more
Caused by: org.postgresql.util.PSQLException: ERROR: insert or update on table "process" violates foreign key constraint "user_id"
  Detail: Key (user_id)=(517679f6-cbea-4519-b491-15886e069196) is not present in table "eperson".
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2713)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2401)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:368)
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:498)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:415)
        at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:335)
        at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:321)
        at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:297)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:292)
        at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:193)
        at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:193)
        at org.flywaydb.core.internal.jdbc.JdbcTemplate.executeStatement(JdbcTemplate.java:201)
        at org.flywaydb.core.internal.sqlscript.ParsedSqlStatement.execute(ParsedSqlStatement.java:95)
        at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.executeStatement(DefaultSqlScriptExecutor.java:210)
        ... 32 more

I looked at the .sql file and it appears the user_id value it's looking for only exists once in the process table, which means (I'm guessing) it longer exists in the eperson table. Not sure how that happened but when i tried installing the old version on another server i didn't face this issue when migrating. This error also appears in the logs when running 'oai import -c' and it's causing the records to be shown as numbers (titles, authors, description etc.) like i explain here

I ran out of ideas. Any help is appreciated


Reply all
Reply to author
Forward
0 new messages