MediaWiki: Διαγραφή άρθρου από τη βάση δεδομένων

Υπάρχουν περιπτώσεις στο MediaWiki που ένα άρθρο δεν μπορεί να διαγραφεί μέσω της συνηθισμένης διεπαφής, οπότε χρειάζεται σκάλισμα της βάσης δεδομένων. Αυτός ο οδηγός περιγράφει τον τρόπο.

Προτού προχωρήσετε σε οποιαδήποτε παρέμβαση στη βάση δεδομένων σας, οπωσδήποτε πρέπει να κρατήσετε ένα αντίγραφο ασφαλείας ολόκληρης της βάσης. Επίσης, αν το Wiki σας έχει έντονη δραστηριότητα, μπορείτε προσωρινά να αποτρέψετε οποιεσδήποτε αλλαγές στις σελίδες, προσθέτωντας μια γραμμή στο αρχείο LocalSettings.php:

$wgReadOnly = 'Το Wiki είναι προσωρινά μη διαθέσιμο για επεξεργασία.';

Δομή της βάσης δεδομένων

Η δομή της βάσης δεδομένων του MediaWiki υπάρχει στην τεκμηρίωση, στο άρθρο Database Layout. Για το κάθε άρθρο που εμφανίζεται στο Wiki εμπλέκονται τουλάχιστον τρεις από τους πίνακες της βάσης:

  1. Στον πίνακα page αποθηκεύεται μια λίστα με τους τίτλους όλων των άρθρων. Όταν χρειάζεται να εμφανιστεί ένα άρθρο, γίνεται αναζήτηση σε αυτόν τον πίνακα με βάση τον τίτλο, και ανακτάται η τιμή του πεδίου page_latest.
  2. Με την τιμή page_latest γίνεται αναζήτηση στον πίνακα revision. Σ' αυτόν τον πίνακα αποθηκεύονται μερικά μεταδεδομένα (δηλαδή όχι καθαυτό το περιεχόμενο) για κάθε αλλαγή που γίνεται στο Wiki. Για να εμφανιστεί ένα άρθρο, από αυτόν τον πίνακα ανακτούνται οι τιμές rev_id και rev_text_id.
  3. Τέλος, με την τιμή rev_text_id που βρέθηκε στο προηγούμενο βήμα, γίνεται αναζήτηση στον πίνακα text, και ανακτάται η τιμή του πεδίου old_text, η οποία αποτελεί και το περιεχόμενο του άρθρου. Ο πίνακας text αποθηκεύει ολόκληρο το περιεχόμενο από κάθε αναθεώρηση κάθε άρθρου του Wiki.

Διαγραφή των καταχωρήσεων

Το πρώτο βήμα είναι να αναζητήσετε τον τίτλο του άρθρου στον πίνακα page, στη στήλη page_title. Οι τίτλοι αποθηκεύονται με τα διαστήματα αλλαγμένα σε κάτω παύλες (underscore) και με τους χαρακτήρες ειδικά διαμορφωμένους σε δεκαεξαδικούς χαρακτήρες UTF-8, αν περιέχεται στον τίτλο χαρακτήρας άλλος από τα Αγγλικά. Δυστυχώς, δεν έχω βρει εύκολο τρόπο να κάνετε τη μετατροπή. Μπορείτε να αναζητήσετε στο διαδίκτυο για βοηθήματα, όπως για παράδειγμα αυτός ο πίνακας μετατροπής χαρακτήρων. Εναλλακτικά, αν χρησιμοποιείτε κάποιο πρόγραμμα όπως το PhpMyAdmin, μπορείτε να εξάγετε ολόκληρο τον πίνακα σε CSV, να τον ανοίξετε με ένα πρόγραμμα όπως το OpenOffice Calc και να δείτε τα περιεχόμενά του κανονικά.

Όταν βρείτε τον τίτλο που θέλετε, σημειώστε την τιμή του πεδίου pageid που αντιστοιχεί στον τίτλο, και διαγράψτε αυτή τη γραμμή από τον πίνακα, εκτελώντας κάτι σαν DELETE FROM mydatabase.mwpage WHERE mwpage.page_id = 1234. Από αυτή τη στιγμή και μετά, η σελίδα δεν είναι διαθέσιμη στο Wiki, το περιεχόμενό της όμως παραμένει στη βάση δεδομένων.

Για να εξαφανιστεί εντελώς η σελίδα από τη βάση δεδομένων και να μην μείνουν «σπασμένες» αναφορές σ' αυτήν, θα πρέπει να διαγράψετε και όλες τις αναθεωρήσεις της από τον πίνακα revision, καθώς και όλα τα αλλαγμένα κείμενα από τον πίνακα text.

Μπορείτε να δείτε όλες τις αναθεωρήσεις που θα διαγραφούν, εκτελώντας κάτι σαν SELECT * FROM mwrevision WHERE mwrevision.revpage = 1234, αλλά προτού τις διαγράψετε, θα χρειαστείτε τα αντίστοιχα revtextid, τα οποία θα τα χρησιμοποιήσετε αργότερα. Για να τα δείτε, εκτελέστε SELECT revtextid FROM mydatabase.mwrevision WHERE mwrevision.revpage = 1234. Κρατήστε κάπου ξεχωριστά αυτό το αποτέλεσμα, θα σας χρειαστεί μετά. Τώρα μπορείτε να διαγράψετε τις αναθεωρήσεις, εκτελώντας κάτι σαν DELETE FROM mydatabase.mwrevision WHERE mwrevision.rev_page = 1234.

Τέλος, από τον πίνακα text θα πρέπει να διαγράψετε τα κείμενα των παλιών αναθεωρήσεων της σελίδας. Το πεδίο oldid αυτού του πίνακα, είναι ίδιο με το revtextid που κρατήσατε προηγουμένως. Μπορείτε λοιπόν να διαγράψετε ένα ένα τα κείμενα, εκτελώντας επανηλειμμένα κάτι σαν DELETE FROM mydatabase.mwtext WHERE mwtext.old_id = 100, αλλάζωντας το «100» σε ό,τι αντιστοιχεί στα δικά σας δεδομένα.

Posted on