Big Binary Files Upload (PostgreSQL)
PostgreSQL Groot Voorwerpe
PostgreSQL bied 'n struktuur bekend as groot voorwerpe, toeganklik via die pg_largeobject
-tabel, wat ontwerp is vir die stoor van groot datatipes, soos beelde of PDF-dokumente. Hierdie benadering is voordelig oor die COPY TO
-funksie omdat dit die uitvoer van data terug na die lêersisteem moontlik maak, wat verseker dat 'n presiese replika van die oorspronklike lêer behoue bly.
Om 'n volledige lêer te stoor binne hierdie tabel, moet 'n voorwerp in die pg_largeobject
-tabel geskep word (geïdentifiseer deur 'n LOID), gevolg deur die invoeging van datastukke, elk 2KB groot, in hierdie voorwerp. Dit is noodsaaklik dat hierdie stukke presies 2KB groot is (met die moontlike uitsondering van die laaste stuk) om te verseker dat die uitvoerfunksie korrek uitgevoer word.
Om jou binêre data te verdeel in 2KB-stukke, kan die volgende opdragte uitgevoer word:
Vir die enkodering van elke lêer na Base64 of Hex, kan die volgende opdragte gebruik word:
Belangrik: Wanneer jy hierdie proses outomatiseer, verseker dat jy stukke van 2KB duidelike teksbyte stuur. Hex-gekodeerde lêers sal 4KB data per stuk vereis as gevolg van die verdubbeling in grootte, terwyl Base64-gekodeerde lêers die formule ceil(n / 3) * 4
volg.
Die inhoud van die groot voorwerpe kan vir foutopsporing doeleindes besigtig word deur gebruik te maak van:
Gebruik van lo_creat
& Base64
Om binêre data te stoor, word 'n LOID eerste geskep:
In situasies waar presiese beheer vereis word, soos die uitbuiting van 'n Blinde SQL-injeksie, word lo_create
verkies om 'n vaste LOID te spesifiseer.
Datastukke kan dan so ingevoeg word:
Om die groot voorwerp uit te voer en moontlik te verwyder na gebruik:
Gebruik van lo_import
& Hex
Die lo_import
-funksie kan gebruik word om 'n LOID vir 'n groot voorwerp te skep en spesifiseer:
Na die skep van die voorwerp, word data per bladsy ingevoeg, waarby elke brokkie nie meer as 2KB oorskry nie:
Om die proses te voltooi, word die data uitgevoer en die groot voorwerp word verwyder:
Beperkings
Dit word opgemerk dat groot voorwerpe ACL's (Toegangsbeheerlyste) kan hê, wat moontlik toegang beperk selfs tot voorwerpe wat deur jou gebruiker geskep is. Nietemin, ouer voorwerpe met inskiklike ACL's kan steeds toeganklik wees vir inhoudslekking.
Last updated