Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Tue 29 September 2015 18:53

dimitri
Juste Inscrit !
Date d'inscription: 29 Sep 2015
Messages: 2

Problème de requête "BEGIN"

Bonjour j'utilise la commande ci-dessous afin de mettre à jour des tables attributaires via QGIS.

-- Table: geofibre.cable
BEGIN;

INSERT INTO geofibre.cable
(the_geom, id_ftth, code_com, ref_cable, statut_ftt, cable_id, type_longu, longueur, diametre, nb_fibre, type_cable, id_metier_, id_ftth_si, type_site_, id_metier1, id_ftth__1, type_site1, commentair, code_nra, operateur, code_proje, dept, nom_affich, symbologie, auteur, date_creat, date_modif, id_ipon, shape_leng)

(SELECT the_geom, id_ftth, code_com, ref_cable, statut_ftt, cable_id, type_longu, longueur, diametre, nb_fibre, type_cable, id_metier_, id_ftth_si, type_site_, id_metier1, id_ftth__1, type_site1, commentair, code_nra, operateur, code_proje, dept, nom_affich, symbologie, auteur, date_creat, date_modif, id_ipon, shape_leng
FROM import.gfi_cable
WHERE NOT EXISTS (SELECT 1
                               FROM geofibre.cable
                               WHERE geofibre.cable.id_ftth = import.gfi_cable.id_ftth)
);

--UPDATE geofibre.cable
UPDATE geofibre.cable

SET the_geom = import.the_geom,
code_com = import.code_com,
ref_cable = import.ref_cable,
statut_ftt = import.statut_ftt,
longueur = import.longueur,
nb_fibre = import.nb_fibre,
type_cable = import.type_cable,
type_site_ = import.type_site_,
commentair = import.commentair,
date_modif = import.date_modif
FROM import.gfi_cable AS import
WHERE geofibre.cable.id_ftth = import.id_ftth;

TRUNCATE import.gfi_cable;

COMMIT;
--ROLLBACK;


-- Table: geofibre.pf
BEGIN;

--INSERT INTO geofibre.pf
INSERT INTO geofibre.pf
(the_geom, type_site, id_metier_, id_ftth, statut_ftt, nom_nro, id_metier1, num_ordre, type_pf, type_peo, nb_sortie_, operateur, code_com, commentair, nb_coupleu, nb_coupl_1, id_metie_1, taille_cab, id_ftth_si, id_ftth_pf, type_pf_pe, num_ordre_, vers_ingen, migration, ipon_id, dept, auteur, date_creat, date_modif, symbologie, code_proje, date_pmpa)

(SELECT the_geom, type_site, id_metier_, id_ftth, statut_ftt, nom_nro, id_metier1, num_ordre, type_pf, type_peo, nb_sortie_, operateur, code_com, commentair, nb_coupleu, nb_coupl_1, id_metie_1, taille_cab, id_ftth_si, id_ftth_pf, type_pf_pe, num_ordre_, vers_ingen, migration, ipon_id, dept, auteur, date_creat, date_modif, symbologie, code_proje, date_pmpa
FROM import.gfi_pf
WHERE NOT EXISTS (SELECT 1
                               FROM geofibre.pf
                               WHERE geofibre.pf.id_ftth = import.gfi_pf.id_ftth)
);

--UPDATE geofibre.pf
UPDATE geofibre.pf

SET the_geom = import.the_geom,
type_site = import.type_site,
statut_ftt = import.statut_ftt,
type_pf = import.type_pf,
code_com = import.code_com,
commentair = import.commentair,
type_pf_pe = import.type_pf_pe,
date_modif = import.date_modif
FROM import.gfi_pf AS import
WHERE geofibre.pf.id_ftth = import.id_ftth;

TRUNCATE import.gfi_pf;

COMMIT;
--ROLLBACK;



-- Table: geofibre.zone_eligibilite
BEGIN;

INSERT INTO geofibre.zone_eligibilite
(the_geom, id_ftth, statut_ftt, id_metier_, num_ordre, id_ftth_pf, type_pf, nb_el, commentair, nom_nro, id_metier1, dept, code_com, auteur, date_creat, date_modif, type_calcu, nb_module, old_id_met, shape_leng, shape_area)

(SELECT the_geom, id_ftth, statut_ftt, id_metier_, num_ordre, id_ftth_pf, type_pf, nb_el, commentair, nom_nro, id_metier1, dept, code_com, auteur, date_creat, date_modif, type_calcu, nb_module, old_id_met, shape_leng, shape_area
FROM import.gfi_zone_eligibilite
WHERE NOT EXISTS (SELECT 1
                               FROM geofibre.zone_eligibilite
                               WHERE geofibre.zone_eligibilite.id_ftth = import.gfi_zone_eligibilite.id_ftth)
);

--UPDATE geofibre.zone_eligibilite
UPDATE geofibre.zone_eligibilite

SET the_geom = import.the_geom,
statut_ftt = import.statut_ftt,
type_pf = import.type_pf,
code_com = import.code_com,
commentair = import.commentair,
id_metier_ = import.id_metier_,
nb_el = import.nb_el,
nb_module = import.nb_module,
date_modif = import.date_modif
FROM import.gfi_zone_eligibilite AS import
WHERE geofibre.zone_eligibilite.id_ftth = import.id_ftth;

TRUNCATE import.gfi_zone_eligibilite;

COMMIT;
--ROLLBACK;



-- Table: geofibre.appui
BEGIN;

--INSERT INTO geofibre.appui
INSERT INTO geofibre.appui
(the_geom,  num_appui,  id_ftth,  id_metier_,  statut_ftt,  num_voie,  lib_num_cp,  nom_com,  nom_voie,  code_com,  code_voie,  nature,  type,  hauteur,  caracteris,  ref_pt,  commentair,  code_ui,  code_nra,  coord_x93,  coord_y93,  dept,  auteur,  date_creat,  date_modif,  tag_ipon,  coord_x2,  infra_gc,  coord_y2,  modif_geo)

(SELECT the_geom,  num_appui,  id_ftth,  id_metier_,  statut_ftt,  num_voie,  lib_num_cp,  nom_com,  nom_voie,  code_com,  code_voie,  nature,  type,  hauteur,  caracteris,  ref_pt,  commentair,  code_ui,  code_nra,  coord_x93,  coord_y93,  dept,  auteur,  date_creat,  date_modif,  tag_ipon,  coord_x2,  infra_gc,  coord_y2,  modif_geo
FROM import.gfi_appui
WHERE NOT EXISTS (SELECT 1
                               FROM geofibre.appui
                               WHERE geofibre.appui.id_ftth = import.gfi_appui.id_ftth)
);

--UPDATE geofibre.appui
UPDATE geofibre.appui

SET the_geom = import.the_geom,
num_appui = import.num_appui,
statut_ftt = import.statut_ftt,
nature = import.nature,
type = import.type,
hauteur = import.hauteur,
caracteris = import.caracteris,
ref_pt = import.ref_pt,
code_com = import.code_com,
commentair = import.commentair,
date_modif = import.date_modif
FROM import.gfi_appui AS import
WHERE geofibre.appui.id_ftth = import.id_ftth;

TRUNCATE import.gfi_appui;

COMMIT;
--ROLLBACK;

Les tables font partit d'une base de donnée gérée sous pgadmin III. Le problème est que depuis quelques jours, lorsque je lance la commande depuis QGIS la mise a jour ne se fait pas correctement (création de doublons, pertes de données). Lorsque je la lance depuis pgadmin, le message suivant apparaît :

ERREUR:  erreur de syntaxe sur ou près de « BEGIN »
LINE 2: BEGIN
        ^

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

ERREUR: erreur de syntaxe sur ou près de « BEGIN »
État SQL :42601
Caractère : 96

J'aimerais donc savoir ce qui ne va pas dans ma commande (si c'est le cas) qui pourtant marchait très bien jusqu’à maintenant (et qui n'a pas été modifié) et je me demande si l'existence de doublons dans la colonne id.ftth servant à la condition, ne serait pas l'origine du problème.

Merci d'avance pour vos réponse

Hors ligne

 

#2 Wed 30 September 2015 14:51

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: Problème de requête "BEGIN"

Bonjour et bienvenue sur Georezo,

n'hésitez pas à abuser de la balise "code" pour apporter de la lisibilité à ce beau premier post :-)

Concernant votre problème, une première approche pourrait consister à tester chacune de vos requêtes afin de savoir laquelle pose problème.

Avec pgadmin, vous pouvez lancer une partie seulement de la requête en slécionnant avec la partie à exécuter (F5).

Dernière modification par MathieuB (Wed 30 September 2015 14:52)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Wed 30 September 2015 15:29

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

Re: Problème de requête "BEGIN"

Bonjour,

Déjà tu peux lancer la première transaction et voir si tu as toujours le problème. Inutile de mettre le code de toutes tes transactions si seule la 1ere plante. Tu pourrais lancer les instructions une à une.

Ce qui est bizarre est que cela plante ligne 2 qui correspond à l'instruction BEGIN;

Y.
PS : Mahtieu, n'hésite pas à éditer le poste pour rajouter ces balises :p


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#4 Thu 01 October 2015 10:11

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: Problème de requête "BEGIN"

Bonjour,

Il m'est arrivé souvent de lancer un explain sur une requête avec transaction et il me sort la même erreur, en revanche si j’exécute ça fonctionne.
Bugg pgadmin ??


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Thu 01 October 2015 10:19

dimitri
Juste Inscrit !
Date d'inscription: 29 Sep 2015
Messages: 2

Re: Problème de requête "BEGIN"

Je vous remercie pour vos réponses. J'ai finalement trouvé la solution au problème en m’acharnant un peu. Il provenait bien de l'existence de doublons dans ma colonne id_ftth. pour les appuis. En prenant une colonne avec des id bien uniques ça fonctionne parfaitement. En effet Christophe la requête fonctionne malgré le message d’erreur, ce qui me laisse perplexe mais bon du moment que ça marche c'est le principal.

Hors ligne

 

#6 Thu 01 October 2015 11:00

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: Problème de requête "BEGIN"

Ça ne semble pas être un bug :

http://www.postgresql.org/docs/9.3/stat … plain.html

EXPLAIN [ ( option [, ...] ) ] statement
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement
[...]
statement

    Any SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE, or CREATE TABLE AS statement, whose execution plan you wish to see.


Salut Yves,

Yves a écrit:

PS : Mahtieu, n'hésite pas à éditer le poste pour rajouter ces balises :p


je ne suis pas modérateur ici ;-)

Dernière modification par MathieuB (Thu 01 October 2015 11:00)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#7 Thu 01 October 2015 12:08

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: Problème de requête "BEGIN"

Ça ne semble pas être un bug :


Merci ! La doc est tellement riche ....


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#8 Thu 01 October 2015 17:06

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: Problème de requête "BEGIN"

Oui et comme toi, avant que tu ne fasse ton message je me disais que c'était un bug :-)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB