8
votes

PostgreSQL Exporter un gros objet à un client

J'ai une base de données PostgreSQL 9.1 dans laquelle les images sont stockées comme gros objets. Existe-t-il un moyen d'exporter les fichiers vers le système de fichiers clients via une requête SQL?

select lo_export(data,'c:\img\test.jpg') from images where id=0;


0 commentaires

4 Réponses :


2
votes

Georg,

Selon le Documentation Pour 9.1 , LO_EXPORT est relatif au client exécutant l'appel. Donc, si la clienta est connectée à base de donnéesB, lorsque ClientA exécute votre SQL, LO_EXPORT devrait créer le fichier sur le clienta où vous l'avez dit. P>


à la lumière du fait que vous avez indiqué votre Utilisation de JDBC sous MATLAB (je ne connais pas ce que vous pouvez faire sous-vente, ni je suis familière avec l'interface pour effectuer l'appel), si vous appelez cela à partir d'une connexion JDBC manuellement: P>

java.sql.Connection conn= ...
java.sql.Statement stmt= conn.createStmt();
java.sql.ResultSet rs= stmt.executeQuery("select data from images where id=0");
// Assume one result
rs.next();
// Gets the blob input stream
InputStream blobData= rs.getInputStream(1);

// At this point you will have to write it to a file. 
// See below

rs.close();
stmt.close();
conn.close();


6 commentaires

Merci! Je suis très nouveau à cela et un peu confus. Le lo_export que vous liez est une fonction C, mais j'aimerais utiliser une requête SQL pour faire de même. Cela fonctionne pour le côté serveur lo_import et lo_export, mais je ne comprends pas comment accomplir cela du côté serveur. Pour le moment, ma solution de contournement consiste à appeler PSQL avec -c \ lo_export foo, "bar" comme argument supplémentaire.


Malheureusement non, je suis nouveau à Stackoverflow également et soumis la réponse avant de revenir, quand tout ce que je voulais, c'était une pause de ligne. :RÉ


Comment vous connectez-vous à l'instance? Utiliser psql?


Ah ha! ok je vois ce que vous essayez de faire


Non, j'utilise JDBC à travers Matlab.


Ah! Encore mieux - OK, alors écrivez-vous du code pour faire du traitement de ces résultats (probablement en Java)?



1
votes

Ce n'est pas possible, car tout le serveur PostgreSQL peut faire est de renvoyer des données au client via la connexion réseau établie par le client. En particulier, il ne peut pas créer de fichier sur le système de fichiers client, seul le code client peut le faire.


2 commentaires

il est possible avec ce nom de fichier \ lo_export lo_oid la commande d'objet de gros objet; Cela vous permet d'exporter le grand objet avec OID LO_OID au nom de fichier sur votre système de fichiers local. Ceci est différent de la fonction Server LO_EXPORT () de la même manière que la copie et les commandes de copie SQL sont différentes. de CommandPrompt.com/ppbook/c12119


La question indique "creuse une requête SQL" et \ lo_export n'est pas une requête SQL, ni une interrogation SQL. C'est une commande interne du programme client PSQL.



12
votes

Cette réponse est très tard mais sera utile de sorte que quelqu'un que je suis sûr

d'obtenir les images du serveur au système client Vous pouvez utiliser ceci xxx

  1. h 192.168.1.101 : est le système de serveur IP
  2. -d mdb : nom de la base de données
  3. -u myadmin : nom d'utilisateur
  4. \ lo_export : la fonction d'exportation qui créera l'image à l'emplacement du système client
  5. c: //leeimage.jpeg : l'emplacement et le nom de l'image cible de l'OID de l'image
  6. 19135 : c'est l'OID de l'image dans votre table.

    La documentation est ici Commandprompt.com >


0 commentaires