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

#1 Re : Général » Remplir une table avec COPY FROM + valeurs » 05/02/2010 18:22:44

Voilà, j'ai créé une séquence pour mon incrément :
     CREATE SEQUENCE line_number_seq;
Comme ça le champ line_number est auto-incrémenté.
Ce n'est pas ce que je voulais, mais bon le résultat est là, et pas trop de temps à perdre avec ce langage...

Mais je reste bloqué sur :
     COPY file_in(rowcontent) FROM filepath;
Qui me renvoie une Syntax error.

Si j'avais une requête SELECT du genre :
     SELECT * FROM matable WHERE file_name = filepath;
filepath étant encore un paramètre IN, hé bien ça marcherait.
Mais avec COPY, ça marche pô...

Il faut peut-être ajouter des cotes ' quelque part, mais là encore, après cinq essais différents et vains, je ne pige toujours pas la syntaxe.

Help please

#2 Général » Remplir une table avec COPY FROM + valeurs » 05/02/2010 16:41:48

Delorbe
Réponses : 2

Bonjour,

Je cherche un moyen de remplir une table :
  file_in(client_id int4, line_number int4, row_content text)
Avec un fichier texte.

La commande COPY FROM me permet d'insérer chaque ligne de mon fichier, dans un enregistrement, plus précisément dans le champ row_content.
Or, je voudrais que les autres champs soient eux aussi remplis avant, pendant ou après (peu importe), avec une valeur fixe : client_id = 1, et un incrément : line_number = i

Je ne sais pas si c'est assez clair...

Voici où j'en suis pour l'instant :

CREATE OR REPLACE FUNCTION import_file_in(clientid int4, filepath text) RETURNS int4 AS $$

DECLARE
    nb_lines int4;
    i int4;

BEGIN
    -- ****************************************************
    -- COPY FILE INTO TABLE
    -- ****************************************************
    -- Empty table
    TRUNCATE file_in;
   
    -- Copy file content
    COPY file_in(rowcontent) FROM filepath;
   
    -- Update table with given params
    UPDATE file_in SET client_id = clientid;
   
    -- Count number of lines
    SELECT INTO nb_lines COUNT(*) FROM file_in;
   
    RETURN nb_lines;
END;

$$ LANGUAGE plpgsql;


Déjà, j'ai une Syntax Error sur :
  COPY file_in(rowcontent) FROM filepath;
Bon, pour ne pas rester bloqué bêtement je remplace ça par une valeur fixe entre cotes : 'c:/test.txt'

Ensuite, je sèche pour ajouter mon incrément line_number...

Une idée svp?
Merci d'avance

Pied de page des forums

Propulsé par FluxBB