Vous n'êtes pas identifié(e).

#1 01/06/2013 17:26:11

mybofy
Membre

[résolu] Usage de lo_import et lo_export depuis Xcode

Bonjour

Je sais utiliser lo_import et lo_export depuis PgAdmin pour gérer mes images : tout est ok.

Je sais utiliser un serveur PostgreSQL depuis un projet cocoa via xcode, ok sauf en ce qui concerne les oid.
Impossible de stocker des images dans la BdD avec lo_import, ni d'extraire des images avec lo_export dans mon projet Xcode.
Je suppose qu'il y a un problème d'autorisation ? Mais je ne trouve rien, ni sur le net, ni dans les doc.
Pourtant PgAdmin est une application OS X comme les applications produites avec Xcode, non ?

Quelqu'un aurait-il une clé pour me permettre de débloquer la situation ?

Merci.

Dernière modification par mybofy (07/06/2013 10:54:01)

Hors ligne

#2 01/06/2013 18:21:10

gleu
Administrateur

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Sans plus d'informations, non, aucune clé magique smile

Pouvez-vous donner plus de détails sur ce que vous faites et sur le problème que vous rencontrez ?


Guillaume.

Hors ligne

#3 02/06/2013 15:02:23

mybofy
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

OSX 10.7.5 - Xcode 5.6.1 - PostgreSQL 9.1

Je crée une application osx avec xcode.
J'utilise le framework pgsqlkit pour accéder à un serveur postgresql local.
Aucun problème pour me connecter à une BdD, accéder à une table et exécuter des requêtes sql pour manipuler la table comme je veux. Comme je le fais avec pgAdmin.
Sauf pour utiliser les fonctions lo_import et lo_export.

NB: connection est OK

Table images:
...
CREATE TABLE images ( image oid ) WITH ( OIDS=TRUE );
...

Dans mon projet xcode :

        NSString *sql0 = @"select image from images where oid=19805;";
        PGSQLRecordset *rs0 = [connection open:sql0];
        NSLog(@"rs0 : %@", rs0);        

marche très bien :

        2013-06-02 14:31:03.923 Image[23354:603] rs0 : <PGSQLRecordset: 0x103b080b0>        

Alors que :

        NSString * sql1 = @"insert into images values (lo_import('/pg-imgs/titi.jpg'));";
        PGSQLRecordset *rs1 = [connection open:sql1];
        NSLog(@"rs1 : %@", rs1);        

ne marche pas :

        2013-06-02 14:31:03.923 Image[23354:603] rs1 : (null)        

Pour contrôle, les requêtes sql0 et sql1 marchent bien dans pgAdmin.

Merci

Hors ligne

#4 02/06/2013 17:11:47

gleu
Administrateur

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Quel est le message d'erreur au niveau du serveur ? ou au niveau du framework ?


Guillaume.

Hors ligne

#5 02/06/2013 19:25:30

dverite
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Sans connaître ce framework pour OSX, ça ne parait pas anormal qu'il n'y ait pas de recordset en retour d'un INSERT qui ne retourne pas de résultat.

Que se passe-t-il s'il y a une clause RETURNING à cet INSERT pour récupérer un résultat, du style:

insert into images values (lo_import('/pg-imgs/titi.jpg')) returning image

Hors ligne

#6 02/06/2013 19:33:46

mybofy
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

to #4
Le log donne :
2013-06-02 19:29:17 CEST ERROR:  must be superuser to use server-side lo_import()
12 2013-06-02 19:29:17 CEST HINT:  Anyone can use the client-side lo_import() provided by libpq.
13 2013-06-02 19:29:17 CEST STATEMENT:  insert into images values (lo_import('/pg-imgs/titi.jpg'))

comment executer le lo_import comme superuser ?

Hors ligne

#7 02/06/2013 19:36:03

mybofy
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

pour #5

Cela ne change rien.
C'est plutôt un problème de superuser, cf #6 ?

Merci

Hors ligne

#8 02/06/2013 19:45:47

dverite
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Oui il faut être superuser comme dit le message d'erreur.
Puisque ça passe avec pgAdmin, ça passera dans l'application en utilisant le même compte.

Hors ligne

#9 02/06/2013 21:36:27

gleu
Administrateur

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Par contre, ça veut dire que le fichier a importé se trouve sur le même serveur que le serveur PostgreSQL.


Guillaume.

Hors ligne

#10 03/06/2013 08:47:57

mybofy
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

pour #8
Dans les paramètres de connexion du framework PGSQLKit:
    - j'avais pour valeur de la variable "userName" le rôle de connexion de la BdD,
    - j'ai remplacé cette valeur par le superuser,
    - et lo_import et lo_export marchent !
Visiblement, je n'avais pas compris les rôles dans PostgreSQL, notamment celui du superuser qui peut tout faire pour PostgreSQL,  comme le fait le compte root pour les unix.
pour #9
Oui, mais ça c'est assez facile à faire, pour moi du moins...
Grand merci à tous.

Hors ligne

#11 04/06/2013 18:11:59

mybofy
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Ça marche, mais pas toujours...

Connexion sous superuser

Ce qui marche :

select lo_export(images.image, '/Users/rn/pg-imgs/toto.jpg') from images where oid=19799;
ll /Users/rn/pg-imgs/
total 5488
drwxrwxrwx   4 rn    staff      136  4 jui 17:46 ./
drwxr-xr-x+ 71 rn    staff     2414  4 jui 17:25 ../
...
-rw-rw-rw-   1 rn  staff  1402800  4 jui 17:46 toto.jpg
...

Ce qui ne marche pas :

select lo_export(images.image, '/Users/rn/Library/Developer/Xcode/DerivedData/Image-clbsvkdcitfkxjalymeymfwizgpz/Build/Products/Debug/Image.app/Contents/Resources/toto.jpg') from images where oid=19799;
ll  /Users/rn/Library/Developer/Xcode/DerivedData/Image-clbsvkdcitfkxjalymeymfwizgpz/Build/Products/Debug/Image.app/Contents/Resources
total 14256
drwxrwxrwx  17 rn  staff      578  4 jui 17:32 ./
drwxrwxrwx   6 rn  rn         204 28 mai 16:15 ../
...
-rw-rw-rw-   1 rn  staff  1402800 30 mai 18:45 toto.jpg
...

Cela ne marche pas non plus :

select lo_export(images.image, '/Users/rn/pg-imgs/toto.jpg') from images where oid=19799;
ll /Users/rn/pg-imgs/
total 5488
drwxrwxrwx   4 rn    staff      136  4 jui 17:46 ./
drwxr-xr-x+ 71 rn    staff     2414  4 jui 17:25 ../
...
-rw-r--r--   1 rn  staff  1402800  4 jui 17:46 toto.jpg
...

Étrange, non ?

Hors ligne

#12 04/06/2013 23:04:50

gleu
Administrateur

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Quel est le message d'erreur ?


Guillaume.

Hors ligne

#13 05/06/2013 09:34:44

Bidou
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Le user avec lequel vous lancez le projet est "rn"? Car il semblerait que ça soit un problème de permissions.
Un simple "sudo chown -R username /Users/username/Library/Developer/Xcode" ne résoudrait pas le problème?

Dernière modification par Bidou (05/06/2013 09:35:40)

Hors ligne

#14 07/06/2013 10:53:27

mybofy
Membre

Re : [résolu] Usage de lo_import et lo_export depuis Xcode

Je crois que je commence à comprendre...
Il y a deux problèmes, qui interféraient.
1. Rôle de connexion.
Pour utiliser "lo_import" et "lo_export" il faut se connecter à la BdD avec le rôle "superuser",
cf. http://docs.postgresql.fr/9.1/lo-funcs.html
Je n'avais pas compris que j'utilisais "lo_import" et "lo_export" en mode "server-side".
2. Permissions.
Les fichiers créés ou lus via "lo_import" et "lo_export" le sont avec le "user" d'installation
de PostgreSQL, par défaut "postgres" que j'ai gardé.
Il faut donc que les permissions du répertoire où sont ces fichiers soient "drwxrwxrwx".
Xcode place ses fichiers dans "/Users/rn/Library/Developer/...".
Or, "Library" a pour permissions "drwx------", d'où "Permission denied" de  "lo_import" et "lo_export".
J'ai fait l'essai de modifier les permissions de "Library" en  "drwxrwxrwx" : sans surprise tout marche.
Mais cette modification me paraît très risquée : je suis revenu aux permissions d'origine de "Library".
Je tente de contourner la situation !
Bien à vous tous

Hors ligne

Pied de page des forums