Je travaille avec Postgres 9.0 et j'ai une application où j'ai besoin d'insérer des images dans le serveur code> distant code>. Donc j'utilise: où p> Une fois l'image insérée dans la base de données, j'ai besoin de mettre à jour une ligne dans une table comme suit: P> 192.168.1.12 code> est l'adresse IP du système serveur P>
5432 code> est le numéro de port p>
mydb code> est le nom de la base de données de serveur p>
my_admin code> est le nom d'utilisateur p >
"\ lo_import 'c: //im/zzz4.jpg'" code> est la requête qui est tirée. p>
P>
ERROR: syntax error at or near "\"
LINE 2: set speciesimages=\lo_import 'C://im/zzz4.jpg'
^
3 Réponses :
Comme votre fichier réside sur votre ordinateur local et que vous souhaitez importer le blob sur un serveur distant, vous avez deux options:
1) Transférez le fichier sur le serveur et utilisez le fonction côté serveur : p>
1. transférer le fichier sur le serveur code> ne sera possible que dans mon cas .. 2.Comment utiliser le
: Lastoid code>?
Sélectionnez: Lastoid comme LOID CODE> ne fonctionne pas
@Presleydias: Cela fonctionne pour moi, je viens de tester. Ne fonctionne que dans PSQL! La variable PSQL est substituée avant que la commande SQL soit envoyée sur le serveur. N'oubliez pas le préfixe : code>.
ne fonctionne que dans PSQL! code> oh ok, je ne pensais pas à ça, je vais essayer à nouveau
hey j'ai essayé ce "C: \ Program Files \ PostgreSQL \ 9.0 \ bin \ psql.exe" -h 192.168.1.12 -P 5432 -D Nansis -u Nansis -u Nansis -u Nansis_Admin -c "Mise à jour des espèces SETSIMages =: Lastoid où les espèces = 'Acaac24' " code> dans cmd mais je reçois cette erreur
Erreur SynTEC à ou proche": " code>
@Presleydias: Cela ne fonctionnera pas, car le commutateur -C CODE> intercepte une chaîne SQL SQL sur le serveur. Pour
: Lastoid code> Pour contenir une valeur, vous devez d'abord exécuter la méta-commande et l'exécuter la commande SQL en mode interactif ou comme je l'ai démontré dans ma réponse. J'ai ajouté une autre variante de syntaxe pour un script facile. Des exemples sont pour une coque Linux.
OK, je fais comme ceci 1. "C: \ Program Files \ PostgreSQL \ 9.0 \ bin \ PSQL.exe" -h 192.168.1.12 -P 5432 -D MyDB -C mon_admin -c "\ lo_import 'c: //im/zzz4.jpg '"; code> puis immédiatement (programmatique) im fait
" C: \ Program Files \ PostgreSQL \ 9.0 \ bin \ psql.exe "-h 192.168.1.12 -P 5432 - D Nansis -u Nansis_admin -c "Mise à jour des espèces espèces d'espèces =: Lastoid où espèces = 'acaac24'" code> `
@Presleydias: C'est deux invocations distinctes de PSQL. Il doit être fait dans une session b> comme je l'ai expliqué ci-dessus.
Pouvez-vous me dire comment convertir votre script en Windows?
@Presleydias: Désolé, je ne fais pas de script sur Windows.
Après avoir importé une image avec cette commande: Vous pouvez trouver la description du binaire en interrogeant le tableau IE: p> pg_catalog.pg_largeObject_metadata code> tableau qui stocke la valeur OID Vous avez besoin. p>
Ou vous pouvez utiliser \ lo_list code>.
Voici comment le faire si votre champ est Tapez Utilisez bytea code>.
\ lo_list code> et
\ lo_unlink < / code> après avoir importé. p> p>
Quelle est la langue de votre application? Dans la plupart des langues, il existe des fonctions pour faire le côté client LO_IMPORT, il est plus facile que de lancer PSQL dans un processus séparé et de récupérer l'OID.
@ Danielvérité: iam utilisant
delphi 7 code> pour le front fin
Delphi a plusieurs pilotes PG. Si vous utilisez PGDAC , vous pourriez regarder cet exemple de code . Si vous utilisez ZEOSLIB Il existe apparemment un objet TZPostGRESQLBlob qui implémente probablement la fonctionnalité.