Big Binary Files Upload (PostgreSQL)
Objets volumineux PostgreSQL
PostgreSQL propose une structure appelée grands objets, accessible via la table pg_largeobject
, conçue pour stocker des types de données volumineux, tels que des images ou des documents PDF. Cette approche est avantageuse par rapport à la fonction COPY TO
car elle permet l'exportation des données vers le système de fichiers, garantissant une réplique exacte du fichier d'origine.
Pour stocker un fichier complet dans cette table, un objet doit être créé dans la table pg_largeobject
(identifié par un LOID), suivi de l'insertion de morceaux de données, chacun de 2 Ko, dans cet objet. Il est crucial que ces morceaux fassent exactement 2 Ko (à l'exception éventuelle du dernier morceau) pour garantir le bon fonctionnement de la fonction d'exportation.
Pour diviser vos données binaires en morceaux de 2 Ko, les commandes suivantes peuvent être exécutées :
Pour encoder chaque fichier en Base64 ou en Hex, les commandes ci-dessous peuvent être utilisées :
Important : Lors de l'automatisation de ce processus, assurez-vous d'envoyer des morceaux de 2 Ko d'octets en texte clair. Les fichiers encodés en hexadécimal nécessiteront 4 Ko de données par morceau en raison du doublement de la taille, tandis que les fichiers encodés en Base64 suivent la formule ceil(n / 3) * 4
.
Le contenu des grands objets peut être consulté à des fins de débogage en utilisant :
Utilisation de lo_creat
& Base64
Pour stocker des données binaires, un LOID est d'abord créé :
Dans les situations nécessitant un contrôle précis, comme l'exploitation d'une Injection SQL Aveugle, lo_create
est préféré pour spécifier un LOID fixe.
Les morceaux de données peuvent ensuite être insérés comme suit:
Pour exporter et potentiellement supprimer l'objet volumineux après utilisation :
Utilisation de lo_import
& Hex
La fonction lo_import
peut être utilisée pour créer et spécifier un LOID pour un grand objet :
Après la création de l'objet, les données sont insérées par page, en veillant à ce que chaque morceau ne dépasse pas 2 Ko :
Pour compléter le processus, les données sont exportées et le grand objet est supprimé :
Limitations
Il est noté que les grands objets peuvent avoir des ACL (Listes de Contrôle d'Accès), restreignant potentiellement l'accès même aux objets créés par votre utilisateur. Cependant, les anciens objets avec des ACL permissives peuvent toujours être accessibles pour l'exfiltration de contenu.
Last updated