Similar to Migrating to Cloud: 'getWatches(...) must not be null error, another failure one might encounter with using JCMA to migrate older Jira installations:

2025-09-22 13:58:42.648661612 ERROR CROSS-PROJECT-DATA project-export Board 'Minor Releases - Tier 2' is referring to an in-existed saved filter ID: 12921. [JCMA 135] Configure an existing filter for this rapid view.

The problem

Here we have an Agile Board referring to non-existent search filter 12921.

You can identify such Boards in your Jira installation with:

select count(*) from "AO_60DB71_RAPIDVIEW" rv LEFT JOIN searchrequest sr ON rv."SAVED_FILTER_ID" = sr.id WHERE sr.id is null;

The fix

These errors occurred in older Boards we don't want, and obviously don't use (having no filter renders them useless). However deleting Boards directly in the database is not simple, due to the many auxiliary records we would also need to delete:

jira-sandbox=> \d "AO_60DB71_RAPIDVIEW"
                                              Table "public.AO_60DB71_RAPIDVIEW"
┌─────────────────────────┬────────────────────────┬───────────┬──────────┬───────────────────────────────────────────────────┐
│         Column          │          Type          │ Collation │ Nullable │                      Default                      │
├─────────────────────────┼────────────────────────┼───────────┼──────────┼───────────────────────────────────────────────────┤
│ CARD_COLOR_STRATEGY     │ character varying(255) │           │          │                                                   │
│ ID                      │ bigint                 │           │ not null │ nextval('"AO_60DB71_RAPIDVIEW_ID_seq"'::regclass) │
│ NAME                    │ character varying(255) │           │ not null │                                                   │
│ OWNER_USER_NAME         │ character varying(255) │           │ not null │                                                   │
│ SAVED_FILTER_ID         │ bigint                 │           │ not null │                                                   │
│ SHOW_DAYS_IN_COLUMN     │ boolean                │           │          │                                                   │
│ SPRINTS_ENABLED         │ boolean                │           │          │                                                   │
│ SPRINT_MARKERS_MIGRATED │ boolean                │           │          │                                                   │
│ SWIMLANE_STRATEGY       │ character varying(255) │           │          │                                                   │
│ SHOW_EPIC_AS_PANEL      │ boolean                │           │          │                                                   │
│ KAN_PLAN_ENABLED        │ boolean                │           │          │                                                   │
│ OLD_DONE_ISSUES_CUTOFF  │ character varying(255) │           │          │                                                   │
│ REFINED_VELOCITY_ACTIVE │ boolean                │           │          │                                                   │
└─────────────────────────┴────────────────────────┴───────────┴──────────┴───────────────────────────────────────────────────┘
Indexes:
    "AO_60DB71_RAPIDVIEW_pkey" PRIMARY KEY, btree ("ID")
Referenced by:
    TABLE ""AO_60DB71_BOARDADMINS"" CONSTRAINT "fk_ao_60db71_boardadmins_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_CARDCOLOR"" CONSTRAINT "fk_ao_60db71_cardcolor_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_CARDLAYOUT"" CONSTRAINT "fk_ao_60db71_cardlayout_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_COLUMN"" CONSTRAINT "fk_ao_60db71_column_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_DETAILVIEWFIELD"" CONSTRAINT "fk_ao_60db71_detailviewfield_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_ESTIMATESTATISTIC"" CONSTRAINT "fk_ao_60db71_estimatestatistic_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_QUICKFILTER"" CONSTRAINT "fk_ao_60db71_quickfilter_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_STATSFIELD"" CONSTRAINT "fk_ao_60db71_statsfield_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_SUBQUERY"" CONSTRAINT "fk_ao_60db71_subquery_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_SWIMLANE"" CONSTRAINT "fk_ao_60db71_swimlane_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_TRACKINGSTATISTIC"" CONSTRAINT "fk_ao_60db71_trackingstatistic_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")
    TABLE ""AO_60DB71_WORKINGDAYS"" CONSTRAINT "fk_ao_60db71_workingdays_rapid_view_id" FOREIGN KEY ("RAPID_VIEW_ID") REFERENCES "AO_60DB71_RAPIDVIEW"("ID")


So instead, just create a 'dummy' filter:


Note the filterid in the URL. In my case it was 48650.

Now update the Boards with invalid filters to use your dummy filter:

UPDATE "AO_60DB71_RAPIDVIEW" rv SET "SAVED_FILTER_ID" = 48650 WHERE NOT EXISTS ( SELECT 1 FROM searchrequest sr WHERE sr.id = rv."SAVED_FILTER_ID");

(Postgres syntax)