#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
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
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: 3197
- 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
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,
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: 3197
- 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