Big Binary Files Upload (PostgreSQL)
Duże obiekty PostgreSQL
PostgreSQL oferuje strukturę znana jako duże obiekty, dostępne za pośrednictwem tabeli pg_largeobject
, przeznaczoną do przechowywania dużych typów danych, takich jak obrazy lub dokumenty PDF. Ten podejście jest korzystne w porównaniu do funkcji COPY TO
, ponieważ umożliwia eksportowanie danych z powrotem do systemu plików, zapewniając dokładną replikę oryginalnego pliku.
Aby przechować kompletny plik w tej tabeli, należy utworzyć obiekt w tabeli pg_largeobject
(zidentyfikowany przez LOID), a następnie wstawić do tego obiektu kawałki danych o rozmiarze 2KB. Ważne jest, aby te kawałki miały dokładnie 2KB (z możliwym wyjątkiem ostatniego kawałka), aby funkcja eksportująca działała poprawnie.
Aby podzielić swoje dane binarne na kawałki o rozmiarze 2KB, można wykonać następujące polecenia:
Aby zakodować każdy plik w formacie Base64 lub Hex, można użyć poniższych poleceń:
Ważne: Automatyzując ten proces, upewnij się, że wysyłasz fragmenty o rozmiarze 2 KB zwykłych bajtów. Pliki kodowane w formacie szesnastkowym będą wymagały 4 KB danych na fragment ze względu na podwojenie rozmiaru, podczas gdy pliki kodowane w formacie Base64 będą podlegać wzorcowi ceil(n / 3) * 4
.
Zawartość dużych obiektów można przeglądać w celach debugowania za pomocą:
Używanie lo_creat
i Base64
Aby przechowywać dane binarne, najpierw tworzony jest LOID:
W sytuacjach wymagających precyzyjnej kontroli, takich jak wykorzystanie Blind SQL Injection, preferowane jest użycie lo_create
do określenia stałego LOID.
Kawałki danych mogą być następnie wstawiane w następujący sposób:
Aby wyeksportować i ewentualnie usunąć duży obiekt po użyciu:
Używanie lo_import
i Hex
Funkcję lo_import
można wykorzystać do utworzenia i określenia LOID dla dużego obiektu:
Po utworzeniu obiektu, dane są wstawiane na stronę, upewniając się, że każdy fragment nie przekracza 2KB:
Aby zakończyć proces, dane są eksportowane, a duży obiekt jest usuwany:
Ograniczenia
Zauważono, że duże obiekty mogą mieć listy ACL (Access Control Lists), które potencjalnie ograniczają dostęp nawet do obiektów utworzonych przez twojego użytkownika. Jednak starsze obiekty z przyzwoitymi listami ACL mogą nadal być dostępne do wycieku treści.
Last updated