SORMAS-Foundation / SORMAS-Project

SORMAS (Surveillance, Outbreak Response Management and Analysis System) is an early warning and management system to fight the spread of infectious diseases.
https://sormas.org
GNU General Public License v3.0
293 stars 142 forks source link

Enable getAllAfter methods to be used to pull data in batches [5] #7303

Closed MateStrysewske closed 2 years ago

MateStrysewske commented 2 years ago

Feature Description

Functional data (such as cases, contacts, persons, samples, etc.) is currently synchronised in one single request.

Problem Description

Especially countries that use a single central SORMAS server run into significant problems here - not only during the initial synchronisation, but potentially also during other syncs, because there's too much functional data. Trying to pull this data from the server with low bandwidth can still lead to timeouts.

Proposed Change

Extend the getAllAfter methods to optionally not return all data, but instead only chunks of a specified size.

Possible Alternatives

Additional Information

Development Specifications

bernardsilenou commented 2 years ago

If system completed or does not succeed to fully synchronize all the possible batches that should be synchronize, then there can be a feedback message to the user.

MateStrysewske commented 2 years ago

@bernardsilenou I'd prefer to have a follow-up issue for that

StefanKock commented 2 years ago

New idea how to avoid problems with microseconds precision in backend database without rewriting all changeDate column presicions:

// 0. Java: Parameters
Date lastChangeDate = "2021-09-11 01:15:01.594";
String lastSynchronizedUuid = "abc";

// 1. SQL:  Find out the needed offset                  lower                                      upper
SELECT uuid FROM cases WHERE changedate >= '2021-09-11 01:15:01.594' AND changedate < '2021-09-11 01:15:01.595' ORDER BY changedate ASC, uuid ASC;

// 2. Java: go through the list and find the index of the lastSynchronizedUuid, let's say it's index 2 in the java.util.List
int offset = resultList.size() == 0 ? 0 : resultList.indexOf(lastSynchronizedUuid);

// 3. SQL: omit the first two entries starting at lower date,  but pick the lastSynchronizedUuid entry for step 4             offset | batchSize + 1
SELECT * FROM cases WHERE changedate >= '2021-09-11 01:15:01.594' ORDER BY changedate ASC, uuid ASC OFFSET 2 LIMIT 11;

/* 4. if resultList.size() > 0: Check whether the first entry matches the lastSynchronizedUuid: 
 *  If yes, send the following 10 entries.
 *  If not, start again (at least one of the not sent entries was changed between step 1 and step 3).
 * /

Already discussed with @syntakker. To be discussed tomorrow with @syntakker and @MartinWahnschaffe

Big disadvantage: All methods in each EntityService would have to be touched again and replaced by more complex but unified construct.

syntakker commented 2 years ago

This generic script updates change date and creation date for all entity tables to timestamp precision millisecond:

do
$$
  declare
        entitytable varchar;
  begin
    for entitytable in (select c1.table_name from  information_schema."columns" c1 
      left join information_schema."columns" c2 on c2.table_name = c1.table_name
      left join information_schema."columns" c3 on c3.table_name = c1.table_name
      where c1.table_schema = 'public' and c1.column_name = 'uuid'
      and c2.table_schema = 'public' and c2.column_name = 'changedate'
      and c3.table_schema = 'public' and c3.column_name = 'creationdate'
      order by c1.table_name asc)
    loop
      execute format('alter table %I alter column changedate type timestamp(3)', entitytable);
      execute format('alter table %I alter column creationdate type timestamp(3)', entitytable);
    end loop; 
  end;
$$;

As @StefanKock pointed out this does not document which tables are actually touched, so I will use this script to generate the code for the actual update:

do
$$
  declare
        entitytable varchar;
  begin
    for entitytable in (select c1.table_name from  information_schema."columns" c1 
      left join information_schema."columns" c2 on c2.table_name = c1.table_name
      left join information_schema."columns" c3 on c3.table_name = c1.table_name
      where c1.table_schema = 'public' and c1.column_name = 'uuid'
      and c2.table_schema = 'public' and c2.column_name = 'changedate'
      and c3.table_schema = 'public' and c3.column_name = 'creationdate'
      order by c1.table_name asc)
    loop
      raise notice 'ALTER TABLE % ALTER COLUMN changedate TYPE timestamp(3);', entitytable;
      raise notice 'ALTER TABLE % ALTER COLUMN creationdate TYPE timestamp(3);', entitytable;
      raise notice '';
    end loop; 
  end;
$$;

==>

ALTER TABLE action ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE action ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE action_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE action_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE activityascase ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE activityascase ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE activityascase_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE activityascase_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE additionaltest ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE additionaltest ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE additionaltest_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE additionaltest_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE aggregatereport ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE aggregatereport ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE aggregatereport_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE aggregatereport_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE areas ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE areas ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE areas_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE areas_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaigndiagramdefinition ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaigndiagramdefinition ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaigndiagramdefinition_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaigndiagramdefinition_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaignformdata ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaignformdata ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaignformdata_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaignformdata_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaignformmeta ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaignformmeta ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaignformmeta_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaignformmeta_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaigns ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaigns ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE campaigns_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE campaigns_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE cases ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE cases ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE cases_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE cases_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE clinicalcourse ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE clinicalcourse ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE clinicalcourse_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE clinicalcourse_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE clinicalvisit ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE clinicalvisit ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE clinicalvisit_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE clinicalvisit_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE community ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE community ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE contact ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE contact ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE contact_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE contact_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE continent ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE continent ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE country ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE country ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE customizableenumvalue ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE customizableenumvalue ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE customizableenumvalue_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE customizableenumvalue_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE diseaseconfiguration ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE diseaseconfiguration ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE diseaseconfiguration_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE diseaseconfiguration_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE district ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE district ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE documents ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE documents ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE epidata ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE epidata ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE epidata_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE epidata_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE eventgroups ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE eventgroups ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE eventgroups_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE eventgroups_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE eventparticipant ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE eventparticipant ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE eventparticipant_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE eventparticipant_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE events ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE events ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE events_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE events_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE exportconfiguration ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE exportconfiguration ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE exportconfiguration_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE exportconfiguration_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE exposures ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE exposures ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE exposures_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE exposures_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE externalshareinfo ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE externalshareinfo ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE facility ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE facility ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE featureconfiguration ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE featureconfiguration ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE featureconfiguration_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE featureconfiguration_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE healthconditions ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE healthconditions ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE healthconditions_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE healthconditions_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE hospitalization ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE hospitalization ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE hospitalization_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE hospitalization_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE immunization ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE immunization ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE immunization_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE immunization_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE labmessage ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE labmessage ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE labmessage_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE labmessage_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE location ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE location ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE location_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE location_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE manualmessagelog ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE manualmessagelog ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE maternalhistory ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE maternalhistory ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE maternalhistory_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE maternalhistory_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE outbreak ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE outbreak ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE outbreak_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE outbreak_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE pathogentest ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE pathogentest ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE pathogentest_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE pathogentest_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE person ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE person ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE person_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE person_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE personcontactdetail ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE personcontactdetail ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE personcontactdetail_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE personcontactdetail_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE pointofentry ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE pointofentry ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE populationdata ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE populationdata ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE porthealthinfo ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE porthealthinfo ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE porthealthinfo_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE porthealthinfo_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE prescription ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE prescription ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE prescription_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE prescription_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE previoushospitalization ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE previoushospitalization ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE previoushospitalization_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE previoushospitalization_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE region ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE region ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE samples ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE samples ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE samples_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE samples_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sharerequestinfo ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sharerequestinfo ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sharerequestinfo_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sharerequestinfo_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sormastosormasorigininfo ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sormastosormasorigininfo ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sormastosormasorigininfo_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sormastosormasorigininfo_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sormastosormasshareinfo ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sormastosormasshareinfo ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sormastosormasshareinfo_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sormastosormasshareinfo_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sormastosormassharerequest ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sormastosormassharerequest ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE sormastosormassharerequest_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE sormastosormassharerequest_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE subcontinent ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE subcontinent ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE surveillancereports ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE surveillancereports ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE surveillancereports_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE surveillancereports_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE symptoms ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE symptoms ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE symptoms_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE symptoms_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE systemevent ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE systemevent ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE task ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE task ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE task_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE task_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE testreport ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE testreport ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE testreport_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE testreport_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE therapy ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE therapy ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE therapy_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE therapy_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE travelentry ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE travelentry ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE travelentry_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE travelentry_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE treatment ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE treatment ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE treatment_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE treatment_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE userrolesconfig ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE userrolesconfig ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE userrolesconfig_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE userrolesconfig_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE users ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE users ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE users_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE users_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE vaccination ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE vaccination ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE vaccination_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE vaccination_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE vaccinationinfo_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE vaccinationinfo_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE visit ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE visit ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE visit_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE visit_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE weeklyreport ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE weeklyreport ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE weeklyreport_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE weeklyreport_history ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE weeklyreportentry ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE weeklyreportentry ALTER COLUMN creationdate TYPE timestamp(3);

ALTER TABLE weeklyreportentry_history ALTER COLUMN changedate TYPE timestamp(3);
ALTER TABLE weeklyreportentry_history ALTER COLUMN creationdate TYPE timestamp(3);