Skip to content

Latest commit

 

History

History
28 lines (16 loc) · 3.46 KB

pg-migration.md

File metadata and controls

28 lines (16 loc) · 3.46 KB

Μετάβαση στο PostgreSQL από MySQL

Οι οδηγίες στο παρόν αφορούν χρήστες που έχουν ακολουθήσει την προηγούμενη έκδοση για MySQL των οδηγιών εγκατάστασης.

Αιτία

Οι προδιαγραφές της εφαρμογής απαιτούν να μπορούμε να απαντήσουμε σε ερωτήματα του τύπου "δώσε μου τα καταστήματα σε ακτίνα X χιλιομέτρων από αυτό το σημείο".

Τα καταστήματα -βάσει προδιαγραφών- αποθηκεύονται στη βάση ως συντεταγμένες WGS84 (γεωγραφικό μήκος και πλάτος, πχ. 36.134892, 108.300293). Άρα πρέπει κάπως να εφαρμόζουμε μία μετατροπή από το σφαιροειδές μοντέλο του WGS84 σε ένα επίπεδο, ώστε να υπολογιστεί η χιλιομετρική απόσταση.

Αν και υπάρχουν τέτοιοι τύποι υπολογισμού ([1], [2]), αφενός αν επιλεχθούν θα πρέπει να υλοποιηθούν από εμάς, και αφετέρου θα υπάρχει σημαντικό κόστος στη βάση δεδομένων αφού θα πρέπει να επιστρέφονται όλα τα καταστήματα και να ελέγχονται ένα-ένα.

Η λύση είναι να χρησιμοποιήσουμε το extension PostGIS για το PostgreSQL και το GeoDjango για το Django.

Το PostGIS είναι το μόνο που υποστηρίζει την αυτόματη προβολή συντεταγμένων WGS84 στο επίπεδο, όταν πραγματοποιούνται σε αυτό ερωτήματα απόστασης σε μετρικό σύστημα. [3].

Οδηγίες για τη μεταφορά

ΠΡΟΣΟΧΗ: Οι οδηγίες αφορούν μόνο το αρχικό στάδιο όπου δεν έχουμε εισάγει ακόμα δεδομένα στην εφαρμογή. Σε διαφορετική περίπτωση θα πρέπει να προβλεφθεί και η μεταφορά των δεδομένων από τη MySQL στη νέα βάση της PostgreSQL.

  1. (Προαιρετικό) Διάγραψε τους χρήστες και τις βάσεις δεδομένων που περιείχε προηγουμένως η MySQL.
  2. (Προαιρετικό) Απεγκατάστησε το Python module mysqlclient, καθώς δεν είναι πλέον απαραίτητο.
  3. Ακολούθησε τα βήματα 1-6 στις οδηγίες εγκατάστασης.
  4. Έχοντας ενεργοποιημένο το virtualenv, τρέξε την pip install -e .[dev] ώστε να εγκατασταθούν τα νέα απαραίτητα modules για το PostgreSQL.
  5. Άλλαξε το .env ώστε να χρησιμοποιεί το PostGIS (DATABASE_URL=postgis://asoures:<password>@localhost/asoures).
  6. Τρέξε python manage.py migrate.