Skip to end of banner
Go to start of banner

Clean up records with inconsistent matched id values

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 19 Next »

MODSOURCE-666 - Getting issue details... STATUS

 if 999 ff s UUID is different from matched_id and status ACTUAL - get highest generation for matched_id and overwrite matched_id to be the same as 999 ff s with incremented generation and also If more than 1 ACTUAL record with the same matched_id - then to those records status will be set as 'OLD'.


The outlined scripts are targeted at fixing records on the Orchid version. 
The scripts implementation aimed at the Poppy version is currently in the testing stage and will be described later.



1.  Script to update multiple ACTUAL records containing the same generation

Update unmatched matched_id and generation and update status
DO
$$
    BEGIN
        CREATE TEMP TABLE external_id_max_created_date_table ON COMMIT DROP AS
        SELECT rl.external_id, MAX(rl.created_date) AS last_creation_date
        FROM {tenantId}_mod_source_record_storage.records_lb rl,
             (
                 SELECT external_id
                 FROM {tenantId}_mod_source_record_storage.records_lb
                 WHERE state = 'ACTUAL'
                 GROUP BY external_id, generation
                 HAVING COUNT(external_id) > 1
             ) AS external_id_of_duplicates_with_same_generation
        WHERE rl.external_id = external_id_of_duplicates_with_same_generation.external_id
        GROUP by rl.external_id;

        UPDATE {tenantId}_mod_source_record_storage.records_lb r
        SET state = 'OLD'
        FROM external_id_max_created_date_table
        WHERE r.external_id = external_id_max_created_date_table.external_id
          AND r.created_date < external_id_max_created_date_table.last_creation_date;

    END;
$$;


2. Script to update multiple ACTUAL records

DO
$$
    BEGIN
        CREATE TEMP TABLE external_id_max_generation_table ON COMMIT DROP AS
        SELECT r.external_id, MAX(r.generation) AS max_generation
        FROM {tenantId}_mod_source_record_storage.records_lb r,
             (
                 SELECT external_id
                 FROM {tenantId}_mod_source_record_storage.records_lb
                 WHERE state = 'ACTUAL'
                 GROUP BY external_id
                 HAVING COUNT(external_id) > 1
             ) AS external_id_of_duplicates
        WHERE r.external_id = external_id_of_duplicates.external_id
        GROUP BY r.external_id;

        UPDATE {tenantId}_mod_source_record_storage.records_lb r
        SET state = 'OLD'
        FROM external_id_max_generation_table
        WHERE r.external_id = external_id_max_generation_table.external_id
          AND r.generation < external_id_max_generation_table.max_generation;

    END;
$$;



3. Script to update records containing inconsistent matched_id with consistent matched_id value and generation

DO
$$
    BEGIN
        CREATE TEMP TABLE value_matched_id_inconsistency ON COMMIT DROP AS
        SELECT rl.id, rl.matched_id, mi.value
        FROM {tenantId}_mod_source_record_storage.records_lb rl,
             {tenantId}_mod_source_record_storage.marc_indexers mi,
             {tenantId}_mod_source_record_storage.marc_records_tracking rt
        WHERE rt.marc_id = mi.marc_id and rt.version = mi.version
          AND rl.id = mi.marc_id AND rl.state='ACTUAL'
          AND mi.field_no='999' AND mi.ind1='f' AND mi.ind2='f' AND mi.subfield_no='s' AND rl.matched_id::text != mi.value;

        CREATE TEMP TABLE matched_id_max_generation_table ON COMMIT DROP AS
        SELECT rl.matched_id, MAX(rl.generation) AS max_gen
        FROM {tenantId}_mod_source_record_storage.records_lb rl,
             value_matched_id_inconsistency val_match
        WHERE rl.matched_id = val_match.value::uuid
        GROUP BY rl.matched_id;

        UPDATE {tenantId}_mod_source_record_storage.records_lb r
        SET matched_id = val_match.value::uuid,
            generation = matched_id_max_generation_table.max_gen + 1
        FROM value_matched_id_inconsistency val_match, matched_id_max_generation_table
        WHERE r.id = val_match.id AND val_match.value::uuid = matched_id_max_generation_table.matched_id;
    END;
$$;




  • No labels