Forum Programmation.SQL Problème exécution script SQL

Posté par  .
Étiquettes : aucune
0
15
juil.
2008
Voila j'essaye de comprendre mais je suis coincé,

j'essaye de scripter le chargement de données via psql et un script SQL
la commande que je passe est :


sudo -u postgres psql -d mabase -f monscript.sql


le problème c'est que si mon script SQL est un peu long (13 lignes ça passe, 38 ça passe plus) psql me fait une erreur sur la première ligne du fichier SQL quelque soit celle-ci.

Avez-vous déjà rencontré ce problème ?
Ça m'embête de coller une première instruction bidon, ça fait gruick.

Merci à vous
  • # Quelques pistes?

    Posté par  . Évalué à 4.

    Bonjour,

    Cela fait un moment que je n'ai eu besoin de PostgreSQL, mais de mémoire, je n'ai jamais eu ce problème, mais:

    - je ne lance jamais psql via sudo, alors qu'il est si simple de le faire se connecter à la base depuis le compte courant (avec -h hostname, -U username, ...);

    - je n'utilisait pas -f mais plutôt psql < fichier, mais j'aurais tendance à penser que -f est quand même mieux;

    - j'ai toujours mis des commentaires dans mes fichiers .sql, et je viens de vérifier, pg_dump le fait aussi... Au lieu d'une instruction bidon, met donc un commentaire (ils commencent par --) pour voir si cela passe mieux;

    - j'aurais tendance à penser à un bug, pourrais-tu éventuellement partager les deux fichiers incriminés?
    • [^] # Re: Quelques pistes?

      Posté par  . Évalué à 2.

      Merci de ta réponse,

      pour faire suivre la discution, je vais préciser par rapport aux points que tu soulèves :

      - psql -U postgres -d mabase -f monscript.sql ne change pas le comportement

      - psql -U postgres -d mabase < monscript.sql ne change pas le comportement

      - Je suis reparti d'un pg_dump et je n'ai pas mieux,

      mon script SQL :


      --
      -- PostgreSQL database dump
      --

      SET client_encoding = 'UTF8';
      SET standard_conforming_strings = off;
      SET check_function_bodies = false;
      SET client_min_messages = warning;
      SET escape_string_warning = off;
      SET search_path = public, pg_catalog;
      SET default_tablespace = '';
      SET default_with_oids = false;
      SET datestyle TO European;

      --
      -- Name: ra_credit_impute_def; Type: TABLE; Schema: public; Owner: proto; Tablespace:
      --

      DROP TABLE IF EXISTS ra_credit_impute_def;
      CREATE TABLE ra_credit_impute_def (
      ligne_affectee character varying(40) NOT NULL,
      ligne_obf character varying(5),
      on_recette_accidentelle character(1) NOT NULL,
      on_imputation_excedentaire character(1) NOT NULL,
      version numeric(3,0),
      id_reference character varying(14) NOT NULL,
      ra_cred_imp_pro_no_cred_imp character varying(255),
      no_credit_impute character varying(255) NOT NULL
      );

      ALTER TABLE public.ra_credit_impute_def OWNER TO proto;

      --
      -- Data for Name: ra_credit_impute_def; Type: TABLE DATA; Schema: public; Owner: proto
      --

      COPY ra_credit_impute_def from '/home/damien/proto/ra_credit_impute_def.dat'
      WITH CSV;
      --
      -- Name: ra_credit_impute_def_pk; Type: CONSTRAINT; Schema: public; Owner: proto; Tablespace:
      --

      ALTER TABLE ONLY ra_credit_impute_def
      ADD CONSTRAINT ra_credit_impute_def_pk PRIMARY KEY (no_credit_impute);

      --
      -- Name: ra_credit_impute_def_fk01; Type: INDEX; Schema: public; Owner: proto; Tablespace:
      --

      CREATE INDEX ra_credit_impute_def_fk01 ON ra_credit_impute_def USING btree (id_reference);

      ALTER TABLE ra_credit_impute_def CLUSTER ON ra_credit_impute_def_fk01;


      et le résultat :


      $ psql -U postgres -d proto -f ra_credit_impute_def.sql
      psql:ra_credit_impute_def.sql:5: ERROR: syntax error at or near ""
      LINE 1:
      ^
      SET
      SET
      SET
      SET
      SET
      SET
      SET
      SET
      DROP TABLE
      CREATE TABLE
      ALTER TABLE
      COPY 1000
      ALTER TABLE
      CREATE INDEX
      ALTER TABLE
      • [^] # Re: Quelques pistes?

        Posté par  . Évalué à 1.

        Euh, ton dump, il provient de quel système, avec quel encodage ?
        Nan, parce que les ^M pour passer à la ligne, y'a que les windowsiens qui trouvent ça bien....
        Enfin, je m'égare peut-être, mais si tu édites ton fichier dump avec vi, par exemple, que donne la commande :set en mode commande ?
        Si tu vois dos quelque part, c'est pas bon signe, ça veut dire que tes sauts de lignes ne sont pas conformes. Alors dans ce cas, tu peux essayer :set fileformat=unix puis :wq, ça va te transformer les retours chariots en quelque chose de correct (\n tout seul).
        Peut-être que je dis une grosse clownerie, mais il me semble avoir eu le même problème, et que c'était une des solutions (tu peux aussi utiliser sed, tr...).
        • [^] # Re: Quelques pistes?

          Posté par  . Évalué à 2.

          Le script a été généré avec pg_dump, vi, et postgresql sur une archlinux, donc a priori pas de ^M (et un :set list avec vi ne me sors rien d'anormal)

          J'ai quand même furieusement l'idée d'un gros bug dans psql mais j'ai du mal à y croire.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.