Big Binary Files Upload (PostgreSQL)
PostgreSQL veliki objekti
PostgreSQL nudi strukturu poznatu kao veliki objekti, pristupačnu putem tabele pg_largeobject
, dizajniranu za skladištenje velikih tipova podataka, kao što su slike ili PDF dokumenti. Ovaj pristup je povoljniji od funkcije COPY TO
jer omogućava izvoz podataka nazad na fajl sistem, čime se obezbeđuje tačna replika originalnog fajla.
Za skladištenje kompletnog fajla unutar ove tabele, mora se kreirati objekat u tabeli pg_largeobject
(identifikovan sa LOID-om), a zatim se vrši umetanje podataka u ove objekte u obliku delova, pri čemu svaki deo ima veličinu od 2KB. Veoma je važno da ovi delovi budu tačno 2KB veličine (uz mogući izuzetak poslednjeg dela) kako bi funkcija izvoza ispravno radila.
Da biste podelili vaše binarne podatke na delove od 2KB, mogu se izvršiti sledeće komande:
Za enkodiranje svake datoteke u Base64 ili Hex format, mogu se koristiti sledeće komande:
Važno: Prilikom automatizacije ovog procesa, obezbedite slanje delova od 2KB čistog teksta u bajtovima. Kod heksadecimalno kodiranih fajlova će biti potrebno 4KB podataka po delu zbog udvostručenja veličine, dok kod Base64 kodiranih fajlova važi formula ceil(n / 3) * 4
.
Sadržaj velikih objekata može se pregledati u svrhe otklanjanja grešaka koristeći:
Korišćenje lo_creat
& Base64
Da biste sačuvali binarne podatke, prvo se kreira LOID:
U situacijama koje zahtevaju preciznu kontrolu, kao što je iskorišćavanje Slepe SQL Injection, lo_create
se preferira za specificiranje fiksnog LOID-a.
Podaci se mogu zatim ubaciti na sledeći način:
Da biste izvezli i potencijalno obrisali veliki objekat nakon upotrebe:
Korišćenje lo_import
& Hex
Funkcija lo_import
može se koristiti za kreiranje i specificiranje LOID-a za veliki objekat:
Nakon kreiranja objekta, podaci se ubacuju po stranici, pri čemu se svaki deo ne sme prelaziti 2KB:
Da biste završili proces, podaci se izvoze i veliki objekat se briše:
Ograničenja
Primećeno je da veliki objekti mogu imati ACL-ove (Access Control List), što potencijalno ograničava pristup čak i objektima koje je kreirao vaš korisnik. Međutim, stariji objekti sa dozvoljenim ACL-ovima i dalje mogu biti dostupni za izvlačenje sadržaja.
Last updated