Comment télécharger Postgres bytea colonne en tant que fichier
Actuellement, j'ai un certain nombre de fichiers stockés dans postgresql 8.4 comme bytea. Les types de fichiers sont .doc, .odt, .pdf, .txt et etc.
Pourrais-je savoir comment faire pour télécharger tous les fichiers stockés dans Postgres parce que j'ai besoin de faire une sauvegarde.
J'ai besoin d'eux dans leur type de fichier d'origine au lieu de bytea format.
Merci!
- C'est une sorte de non, mais s'il vous plaît noter que dans postres 9.0 par défaut
bytea_output
changements deencode
àhex
. Veuillez consulter la notes de version
Vous devez vous connecter pour publier un commentaire.
Une option simple est d'utiliser
COPIER
de commande avecencodage
au format hexadécimal, puis appliquerxxd
shell de commande (avec l'-p continue hexdump style switch). Par exemple, disons que j'ai d'image jpg dans bytea colonne dans les échantillons de table:Comme je l'ai vérifié qu'il fonctionne dans la pratique.
while read -N2 code; do printf "\x$code"; done <image.hex >image.jpg
au lieu xxd. Il n'est pas pur postgresql, mais vous avez seulement besoin de bash pour cela. Ils disent xxd est une partie de vim paquet.'hex'
, vous pouvez utiliser'base64'
. Le fichier sera plus petit et lebase64
utilitaire est plus commun quexxd
.psql -qt...
qui sera de sortie le champ lui-même, alors vous pouvez omettre le\copy
Essayez ceci:
Si vous avez beaucoup de données à télécharger, alors vous pouvez obtenir les premières lignes, puis itérer sur chaque une de l'écriture de la bytea champ de fichier.
x
de la chaîne et de l'utilisationhex2bin
pour obtenir des données binaires réelles.Mieux que je suis au courant, bytea de fichier qui doit être fait au niveau application.
(9.1 pourrait changer cela avec le système de fichiers de données wrapper contrib. Il y a aussi un lo_export fonction, mais elle n'est pas applicable ici.)
Voici la chose la plus simple que je pouvais venir:
La
-qAt
est important, car il enlève toute mise en forme de la sortie. Ces options sont disponibles à l'intérieur de lapsql
shell, trop.