Big Binary Files Upload (PostgreSQL)
PostgreSQL Μεγάλα Αντικείμενα
Η PostgreSQL προσφέρει μια δομή που ονομάζεται μεγάλα αντικείμενα, προσβάσιμα μέσω του πίνακα pg_largeobject
, σχεδιασμένη για την αποθήκευση μεγάλων τύπων δεδομένων, όπως εικόνες ή έγγραφα PDF. Αυτή η προσέγγιση είναι προτιμότερη από τη λειτουργία COPY TO
, καθώς επιτρέπει την εξαγωγή των δεδομένων πίσω στο σύστημα αρχείων, εξασφαλίζοντας έναν ακριβή αντίγραφο του αρχικού αρχείου.
Για να αποθηκεύσετε ένα πλήρες αρχείο μέσα σε αυτόν τον πίνακα, πρέπει να δημιουργηθεί ένα αντικείμενο στον πίνακα pg_largeobject
(που αναγνωρίζεται από ένα LOID), ακολουθούμενο από την εισαγωγή κομματιών δεδομένων, κάθε ένα μεγέθους 2KB, σε αυτό το αντικείμενο. Είναι κρίσιμο αυτά τα κομμάτια να έχουν ακριβώς μέγεθος 2KB (με την πιθανή εξαίρεση του τελευταίου κομματιού) για να εξασφαλιστεί η σωστή λειτουργία της λειτουργίας εξαγωγής.
Για να διαιρέσετε τα δυαδικά δεδομένα σας σε κομμάτια 2KB, μπορείτε να εκτελέσετε τις παρακάτω εντολές:
Για την κωδικοποίηση κάθε αρχείου σε Base64 ή Hex, μπορούν να χρησιμοποιηθούν οι παρακάτω εντολές:
Σημαντικό: Κατά την αυτοματοποίηση αυτής της διαδικασίας, βεβαιωθείτε ότι στέλνετε κομμάτια των 2KB από καθαρό κείμενο. Τα αρχεία με κωδικοποίηση σε δεκαεξαδική μορφή θα απαιτούν 4KB δεδομένων ανά κομμάτι λόγω της διπλασιασμένης μεγέθυνσης, ενώ τα αρχεία με κωδικοποίηση Base64 ακολουθούν τον τύπο ceil(n / 3) * 4
.
Τα περιεχόμενα των μεγάλων αντικειμένων μπορούν να προβληθούν για σκοπούς εντοπισμού σφαλμάτων χρησιμοποιώντας:
Χρήση της lo_creat
& Base64
Για να αποθηκεύσετε δυαδικά δεδομένα, πρέπει πρώτα να δημιουργήσετε ένα LOID:
Σε περιπτώσεις που απαιτείται ακριβής έλεγχος, όπως η εκμετάλλευση ενός Blind SQL Injection, προτιμάται η χρήση της lo_create
για τον καθορισμό ενός σταθερού LOID.
Οι τμήματα δεδομένων μπορούν να εισαχθούν ως εξής:
Για να εξαγάγετε και πιθανώς να διαγράψετε το μεγάλο αντικείμενο μετά τη χρήση:
Χρήση της lo_import
& Hex
Η συνάρτηση lo_import
μπορεί να χρησιμοποιηθεί για τη δημιουργία και καθορισμό ενός LOID για ένα μεγάλο αντικείμενο:
Μετά τη δημιουργία του αντικειμένου, εισάγεται δεδομένα ανά σελίδα, εξασφαλίζοντας ότι κάθε τμήμα δεν υπερβαίνει τα 2KB:
Για να ολοκληρωθεί η διαδικασία, τα δεδομένα εξάγονται και το μεγάλο αντικείμενο διαγράφεται:
Περιορισμοί
Σημειώνεται ότι τα μεγάλα αντικείμενα μπορεί να έχουν ACLs (Λίστες Ελέγχου Πρόσβασης), περιορίζοντας πιθανώς την πρόσβαση ακόμη και σε αντικείμενα που δημιουργήθηκαν από τον χρήστη σας. Ωστόσο, παλαιότερα αντικείμενα με ευέλικτα ACLs ενδέχεται να είναι ακόμη προσβάσιμα για την εξαγωγή περιεχομένου.
Last updated