8
votes

PostgreSQL \ lo_import et comment obtenir l'OID résultant dans une commande de mise à jour?

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: xxx pré>

où 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>

 Capture d'écran de Shell 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>

ERROR:  syntax error at or near "\"
LINE 2: set speciesimages=\lo_import 'C://im/zzz4.jpg'
                          ^


3 commentaires

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 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é.


3 Réponses :


6
votes

9 commentaires

1. transférer le fichier sur le serveur ne sera possible que dans mon cas .. 2.Comment utiliser le : Lastoid ? Sélectionnez: Lastoid comme LOID 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 : .


ne fonctionne que dans PSQL! 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' " dans cmd mais je reçois cette erreur Erreur SynTEC à ou proche": "


@Presleydias: Cela ne fonctionnera pas, car le commutateur -C intercepte une chaîne SQL SQL sur le serveur. Pour : Lastoid 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 '"; 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'" `


@Presleydias: C'est deux invocations distinctes de PSQL. Il doit être fait dans une session 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.



0
votes

Après avoir importé une image avec cette commande: xxx

Vous pouvez trouver la description du binaire en interrogeant le tableau pg_catalog.pg_largeObject_metadata tableau qui stocke la valeur OID Vous avez besoin.

IE: xxx


1 commentaires

Ou vous pouvez utiliser \ lo_list .



0
votes

Voici comment le faire si votre champ est Tapez bytea . xxx

Utilisez \ lo_list et \ lo_unlink < / code> après avoir importé.


0 commentaires