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

#26 Re : Migration » Migration WinDev -> Postgresql 8.4 » 22/07/2011 17:05:56

Lorsque je n'avais pas les droits de super user, j'avais l'erreur
"doit être super-utilisateur pour utiliser COPY à partir ou vers un fichier"
après l'exécution de
"copy commune from 'Z:/Geologie/ARCGIS/Layachi/postgis/communes.csv' delimiters ';' CSV"

Maintenant que j'ai ces droits j'ai  l'erreur qui dit que le fichier est introuvable.

#27 Re : Migration » Migration WinDev -> Postgresql 8.4 » 22/07/2011 16:33:48

Je travaille sous windows sur un poste utilisateur qui se connecte à un serveur où Postgresql est installé. J'ai mes propores identifiants pour me connecter. Je suis le propriétaire de la base de donnée en question (pas postgres). On vient de m'accorder les droits de super user pour exécuter la requête copy.
Dans le cas que je viens d'expliciter je ne pense pas que c'est postgres qui doit pouvoir accéder au fichier. Est-ce que je me trompe ?

#28 Re : Migration » Migration WinDev -> Postgresql 8.4 » 22/07/2011 15:50:06

Comment puis-je reconnaître les endroits accessibles par l'utilisateur postgres ?

#29 Re : Migration » Migration WinDev -> Postgresql 8.4 » 22/07/2011 15:42:04

Non, le fichier est sur un poste client du serveur Postgresql. Où est-ce qu'il faut le mettre plus exactement ?

#30 Re : Migration » Migration WinDev -> Postgresql 8.4 » 22/07/2011 15:24:01

J'ai mis le fichier dans la racine du disque C et j'ai exécuté la requête :
COPY commune FROM 'C:/communes.csv' WITH DELIMITER AS ';'

Et j'ai eu l'erreur :
ERREUR:  n'a pas pu ouvrir le fichier « C:/communes.csv » pour une lecture : No such file or directory

********** Erreur **********

ERREUR: n'a pas pu ouvrir le fichier « C:/communes.csv » pour une lecture : No such file or directory
État SQL :58P01

#31 Re : Migration » Migration WinDev -> Postgresql 8.4 » 22/07/2011 12:43:39

Requête :
COPY commune FROM '\\\\imhotep\\OIT\\Geologie\\ARCGIS\\Layachi\\postgis\\communes.csv' WITH DELIMITER AS ';'

Erreur :
ATTENTION:  utilisation non standard de \\ dans une chaîne littérale
LINE 1: COPY commune FROM '\\\\imhotep\\OIT\\Geologie\\ARCGIS\\Layac...
                          ^
HINT:  Utilisez la syntaxe de chaîne d'échappement pour les antislashs, c'est-à-dire E'\\'.
ERREUR:  n'a pas pu ouvrir le fichier « \\imhotep\OIT\Geologie\ARCGIS\Layachi\postgis\communes.csv » pour une lecture : Invalid argument

********** Erreur **********

ERREUR: n'a pas pu ouvrir le fichier « \\imhotep\OIT\Geologie\ARCGIS\Layachi\postgis\communes.csv » pour une lecture : Invalid argument
État SQL :XX000


Le fichier n'est pas sur le serveur Postgresql. Dans quel répertoire doit-il être ?

#32 Re : Migration » Migration WinDev -> Postgresql 8.4 » 22/07/2011 09:54:20

Bonjour,

Je vous remercie tous de vos réponses.
J'ai un soucis avec la commande COPY table FROM ...
Le fichier CSV à partir duquel je veux copier les données ne peut pas être ouvert :
ERREUR:  n'a pas pu ouvrir le fichier « //.../communes.csv » pour une lecture : Invalid argument

Avez-vous déjà rencontré cette erreur ?

Cordialement.

#33 Re : Migration » Migration WinDev -> Postgresql 8.4 » 19/07/2011 11:12:05

Je vous remercie. Pourriez-vous m'indiquer une documentation qui explique comment utiliser pgloader (de l'installation à l'utilisation) ?

#34 Migration » Migration WinDev -> Postgresql 8.4 » 18/07/2011 09:57:28

yo_haha
Réponses : 26

Bonjour,

Je veux faire une migration de données de WinDev vers Postgresql 8.4. Pour cela, j'ai fait un export de la base WinDev vers Excel et après je compte remplir les tables crées dans Postgresql par les données contenues dans les tables Excel. Pourriez-vous m'expliquer comment remplir ces tables ?

Cordialement.

#35 Re : PL/pgSQL » Erreur lors de l'appel d'une fonction retournant SET OF RECORD » 08/07/2011 09:16:03

Donc ce n'est nonplus possible de passer la taille du tableau en argument de la fonction ?

#36 Re : PL/pgSQL » Erreur lors de l'appel d'une fonction retournant SET OF RECORD » 07/07/2011 12:54:54

Est-ce possible de remplecer tableau VARCHAR[][] par
                     taille_litho INTEGER;
    SELECT INTO taille_litho count(num_litho) FROM lithostratigraphie;

    taille_sond INTEGER;
    SELECT INTO taille_sond count(num_sond) FROM sondage;

    tableau VARCHAR[taille_litho][taille_sond];
    elem VARCHAR;

#37 Re : PL/pgSQL » Erreur lors de l'appel d'une fonction retournant SET OF RECORD » 07/07/2011 09:31:56

L'erreur apparaît lorssque j'exécute la requête suivante :
SELECT * FROM litho_sondage()

Voici le message d'erreur :

RREUR:  indice du tableau en dehors de l'échelle
CONTEXT:  PL/pgSQL function "litho_sondage" line 43 at affectation

********** Erreur **********

ERREUR: indice du tableau en dehors de l'échelle
État SQL :2202E
Contexte : PL/pgSQL function "litho_sondage" line 43 at affectation

#38 Re : PL/pgSQL » Erreur lors de l'appel d'une fonction retournant SET OF RECORD » 06/07/2011 11:00:07

La fonction :

/*La fonction retourne un tableau croisé de tous les sondages dans la première ligne et toutes
les couches litho dans la première colonne. Dans les autres cellules elle met la profondeur de
la couche litho de la même colonne dans le sondage de la même ligne */
DROP FUNCTION litho_sondage();
CREATE OR REPLACE FUNCTION litho_sondage() RETURNS SETOF text AS $$

DECLARE
    i INTEGER := 2;
    j INTEGER := 2;
    tailleSond INTEGER := 0;
    tailleLitho INTEGER := 0;
    trouve INTEGER := 0;
    found1 INTEGER := 0;
    found2 INTEGER := 0;
    ligne RECORD;
    tab RECORD;
    tableau VARCHAR[];
    elem VARCHAR;

    numsond CURSOR FOR SELECT num_sondage FROM sondage;

    nomlitho CURSOR FOR SELECT nom_litho FROM lithostratigraphie;

    resultat CURSOR FOR SELECT num_sondage, code_sondage, num_litho, nom_litho, toit_form_prof
                FROM sondage, litho, litho_sondage
                WHERE num_sondage=sondage AND num_litho=litho;

BEGIN
    tableau[1][1] := 'Litho/Sondage';

    --Remplissage de la première colonne par les nom des couches litho
    OPEN nomlitho;
    LOOP
        FETCH nomlitho INTO ligne;
        EXIT WHEN NOT FOUND;
        tableau[i][1] = ligne.nom_litho;
        i := i+1;
    END LOOP;
    CLOSE nomlitho;

    --Remplissage de la première ligne par les numéros des sondages
    i := 2;
    OPEN numsond;
    LOOP
        FETCH numsond INTO ligne;
        EXIT WHEN NOT FOUND;
        tableau[1][i] = ligne.code_sond;
        i := i+1;
    END LOOP;
    CLOSE numsond;

    --Remplissage des autres cellules par les profondeurs
    i := 2;
    OPEN resultat;
    LOOP
        FETCH resultat INTO ligne;
        EXIT WHEN NOT FOUND;
       
        --Recherche du sondage correspondant à la ligne résultat de la requête SQL
        LOOP
            IF tableau[i][1] = ligne.num_sondage THEN
                FOUND1 := 1;
            END IF;
            EXIT WHEN FOUND1 = 1;
   
            i := i+1;
           
        END LOOP;
   
        FOUND1 := 0;

        --Recherche de la couche litho correspondant à la ligne résultat de la requête SQL
        LOOP
            IF tableau[1][j] = ligne.nom_litho THEN
                FOUND2 := 1;
            END IF;
           
            EXIT WHEN FOUND2 = 1;

            j := j+1;
           
        END LOOP;

        FOUND2 := 0;

        --Remplissage de la cellule (i,j)
        tableau[i][j] := ligne.toit_form_prof;

        i := 2;
        j := 2;

    END LOOP;
    CLOSE resultat;

    j := 1;

    --Elimination des lignes dont les cellules sont nulles : Elimination des couches litho n'apparaissant dans aucun sondage
    FOR tab IN SELECT unnest(tableau) LOOP
        --La première ligne du tableau contient les noms des sondages, on passe aux suivantes
        IF j = 1 THEN
            j := j+1;
            CONTINUE;
        END IF;
       
        i := 1;
       
        FOR elem IN SELECT unnest(tab) LOOP
            --La première colonne du tableau contient les noms des couches litho, on passe aux suivantes
            IF i = 1 THEN
                i := i+1;
                CONTINUE;
            ELSIF elem IS NOT NULL THEN
                trouve := 1;
            END IF;

            --Si la ligne contient au moins une case non nulle, elle est gardée et on passe à la ligne suivante
            IF trouve = 1 THEN
                RETURN NEXT tab;
                EXIT;
            END IF;

        END LOOP;
       
    END LOOP;
   
    RETURN;
END;

$$ LANGUAGE 'plpgsql';



J'exécute la fonction de cette façon :

SELECT * FROM litho_sondage()

#39 PL/pgSQL » Erreur lors de l'appel d'une fonction retournant SET OF RECORD » 06/07/2011 09:52:47

yo_haha
Réponses : 9

Bonjour,

J'ai une fonction retournant SET OF RECORD comme valeur de retour. Lorsque j'appelle cette fonction : SELECT * FROM ma_fonction(), j'ai une erreur : ERREUR:  indice du tableau en dehors de l'échelle. Dans la fonction j'utilise un tableau à deux dimensions de type VARCHAR[][] que j'utilise sans initialisation préalable parce que je ne connais pas le nombre de colonnes ni de lignes (ces nombres sont les résultats d'une requête SQL).

Est-ce que l'erreur vient de là ?

Cordialement.

Pied de page des forums

Propulsé par FluxBB