Project Title : OpenMRS Should Run on PostgreSQL
- Primary mentor: Daniel Kayiwa
- Backup mentor: Juliet Wamalwa
- Student: Aman Mishra
- Project Wiki: https://wiki.openmrs.org/display/projects/GSoC+2020+%3A+OpenMRS+should+run+on+PostgreSQL
Overview
Before work started on this project, OpenMRS only offered MySQL as its compatible database system. The main aim of this project was to extend the database support to PostgreSQL as well. This majorly involves extending the PostgreSQL support to OpenMRS Platform which forms the basis of all the different api’s and services used by different OpenMRS modules. Then subsequently extend this support to different Reference Application modules and ultimately to Reference Application itself. This is going to be a major feature to be released in the next iterations of both OpenMRS Platform as well as OpenMRS Reference Application.
Objectives
- Add PostgreSQL support for OpenMRS Platform — Done
- Add PostgreSQL support for OpenMRS Reference Application — Done
- Create a CI build which breaks when liquibase changesets fail to run on PostgreSQL — Done
Contributions
- TRUNK-5751: https://github.com/openmrs/openmrs-core/pull/3220
- TRUNK-5752 : https://github.com/openmrs/openmrs-core/pull/3224
- TRUNK-5758 : https://github.com/openmrs/openmrs-core/pull/3235
- TRUNK-5794 : https://github.com/openmrs/openmrs-core/pull/3252
- TRUNK-5798 : https://github.com/openmrs/openmrs-core/pull/3272
- TRUNK-5800 : https://github.com/openmrs/openmrs-core/pull/3260
- TRUNK-5807 : https://github.com/openmrs/openmrs-core/pull/3318
- TRUNK-5823 : https://github.com/openmrs/openmrs-core/pull/3282
- TRUNK-5826 : https://github.com/openmrs/openmrs-core/pull/3288
- TRUNK-5831 : https://github.com/openmrs/openmrs-core/pull/3299
- TRUNK-5832 : https://github.com/openmrs/openmrs-core/pull/3296
- TRUNK-5843 :https://github.com/openmrs/openmrs-core/pull/3327
- TRUNK-5870 : https://github.com/openmrs/openmrs-core/pull/3372
- TRUNK-5887 : https://github.com/openmrs/openmrs-core/pull/3398
- TRUNK-5901 : https://github.com/openmrs/openmrs-core/pull/3426
- TRUNK-5917 : https://github.com/openmrs/openmrs-core/pull/3490
- TRUNK-5921 : https://github.com/openmrs/openmrs-core/pull/3498
- TRUNK-5927 : https://github.com/openmrs/openmrs-core/pull/3506
- HTML-740 : https://github.com/openmrs/openmrs-module-htmlformentry/pull/190
- HTML-743 : https://github.com/openmrs/openmrs-module-htmlformentry/pull/193
- HTML-744 : https://github.com/openmrs/openmrs-module-htmlformentry/pull/194
- CALC-56 : https://github.com/openmrs/openmrs-module-calculation/pull/8
- CALC-55 : https://github.com/openmrs/openmrs-module-calculation/pull/7
- IDGEN-115 :https://github.com/openmrs/openmrs-module-idgen/pull/82
- IDGEN-116 : https://github.com/openmrs/openmrs-module-idgen/pull/83
- IDGEN-117 :https://github.com/openmrs/openmrs-module-idgen/pull/84
- IDGEN-118 :https://github.com/openmrs/openmrs-module-idgen/pull/85
- IDGEN-119 : https://github.com/openmrs/openmrs-module-idgen/pull/86
- IDGEN-120 : https://github.com/openmrs/openmrs-module-idgen/pull/87
- PROV-104 :https://github.com/openmrs/openmrs-module-providermanagement/pull/41
- PROV-105 : https://github.com/openmrs/openmrs-module-providermanagement/pull/39
- PROV-106 : https://github.com/openmrs/openmrs-module-providermanagement/pull/40
- MAP-40 :https://github.com/openmrs/openmrs-module-metadatamapping/pull/53
- MAP-41 :https://github.com/openmrs/openmrs-module-metadatamapping/pull/55
- REPORT-866 : https://github.com/openmrs/openmrs-module-reporting/commit/13352367050341bae9c1792221d1e43563041454
- REPORT-867 : https://github.com/openmrs/openmrs-module-reporting/pull/201
- REPORT-869 : https://github.com/openmrs/openmrs-module-reporting/pull/203
- AM-216 : https://github.com/openmrs/openmrs-module-appointmentscheduling/pull/33
- AM-217 : https://github.com/openmrs/openmrs-module-appointmentscheduling/pull/34
- AM-218 : https://github.com/openmrs/openmrs-module-appointmentscheduling/pull/35
- AM-219 : https://github.com/openmrs/openmrs-module-appointmentscheduling/pull/36
- AM-220 : https://github.com/openmrs/openmrs-module-appointmentscheduling/pull/37
- AM-221 : https://github.com/openmrs/openmrs-module-appointmentscheduling/pull/38
- ADDR-119 : https://github.com/openmrs/openmrs-module-addresshierarchy/pull/30
- ADDR-120 : https://github.com/openmrs/openmrs-module-addresshierarchy/pull/31
- EA-159 : https://github.com/openmrs/openmrs-module-emrapi/pull/187
- EA-160 : https://github.com/openmrs/openmrs-module-emrapi/pull/189
- EA-161 : https://github.com/openmrs/openmrs-module-emrapi/pull/190
- Documentation Done: https://wiki.openmrs.org/display/docs/OpenMRS+Setup+On+PostgreSQL
Weekly Blogs
- Community Bonding Period
- Week 1
- Week 2
- Week 3
- Week 4
- Week 5
- Week 6
- Week 7
- Week 8
- Week 9
- Week 10
- Week 11
- Week 12
Resources
Talk Threads Initiated :
- https://talk.openmrs.org/t/gsoc-2020-openmrs-should-support-postgresql/28755
- https://talk.openmrs.org/t/sequence-error-on-creating-patient-in-postgresql/28127/3
- https://talk.openmrs.org/t/patient-management-in-postgresql/28228/7
- https://talk.openmrs.org/t/liquibase-issues-with-postgresql/28040
Final Project Demo Apologies for demo being a bit long but there was a lot to show
Future Works
Comparing with how MySQL is deeply rooted into the OpenMRS systems, what can be done is :
- Although, I have done one round of testing on PostgreSQL for both Reference Application as well as OpenMRS Platform to ensure that all the features are working same as they work on MySQL, still much more extensive testing can be done to test the different possible scenarios.
- Add PostgreSQL support as a part of OpenMRS SDK. This will be of great help to developers that work on OpenMRS day and night for rapid development and testing.
Thoughts on GSoC 2020
This project is my very first contribution to an open source community. The whole process, starting from community bonding period to the entire coding period, has been a huge learning experience from me. The regular scrum meets, insightful discussion with mentors, helping others in community and many such things will always remind me how work can be made interesting. And as long as you hold a will to learn, its never an end. Numerous good habits came out of GSoC for me-being punctual, admitting when you are wrong, being meticulous in your work; are some of them. I would like to thank the entire OpenMRS community for providing me with this opportunity, my mentors Daniel Kayiwa and Juliet Wamalwa for believing in me through out the process and at last Google for making this program happen even in such harsh situations.