|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
Bonjour,
Actuellement en stage au Conseil Régional Aquitaine et plus particulièrement au sein de la cellule THD (Très Haut Débit), je travaille sur des données télécom. C’est dans ce cadre que j’essaye de créer une base de données Postgis, en lien avec Qgis, avec pour objectif d’extraire des données directement depuis la base via des requêtes. Etant néophyte dans ce domaine, je fais appel à vous car j’ai plusieurs problèmes que je n’arrive pas à résoudre malgré mes lectures sur le langage SQL… J’ai donc créé une base PostGis et y ai ajouté une centaine de tables de formats différents (shp, .txt, .csv). Mes questions : - j’ai dans la plupart de mes tables .txt deux colonnes avec des coordonnées X, Y. Dois-je faire une opération particulière pour ajouter une colonne the_geom comme c’est le cas pour les shapes (cela s’est fait automatiquement pour ces tables) ? - Dois-je attribuer la même projection à toutes mes tables ? L’objectif de cette base est d’extraire des données à une échelle infra-départementale (communauté de commune, communauté d’agglo, ou communauté urbaine), sachant que dans les tables les informations ne sont localisées qu’à l’échelle de la commune (code INSEE). En effet, une communauté de commune va faire appel à nous afin que nous leur fournissions les informations à l’échelle de leur territoire. L’idéal serait donc de réaliser un ensemble de requêtes basées sur un territoire infra-départemental (communauté de commune…) afin de récupérer des données qui se trouvent à l’échelle de la commune dans la base. J’ai donc ajouté une table contenant les correspondances entre code INSEE et communauté de commune d’appartenance. Je pensais donc fonctionner de deux manières : - pour les tables qui ne contiennent pas de coordonnées X,Y il faut donc que je fasse une requête attributaire, je voulais donc rechercher les différents codes INSEE qui m’intéresse au sein de toute la base pour rapatrier toutes les infos Ex : Code :
Serait-il possible de réaliser la requête dans l’autre sens, à savoir rechercher une communauté de communes dans la table de correspondance INSEE-communauté de commune, trouver les codes INSEE associés et ensuite réaliser la requête de ces codes INSEE sur toute la table. - pour les tables ayant une colonne the_geom, pensez-vous qu’il est possible de faire une requête spatiale ou géométrique, toujours par rapport à la table de correspondance code INSEE-communauté de commune ? Si oui, je n’ai aucune idée sur la façon de procéder donc je suis preneur de quelques pistes. Merci d’avance pour votre aide qui me sera précieuse. |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 174 ![]() |
Une chose à la fois.....
tu peux récupérer les codes INSEE en fonction de la table Code :
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
Oui mais sachant que j'ai une centaine de tables je voulais savoir s'il était possible de simplifier la requête.
|
|
|
00
|
|
|
#4 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 174 ![]() |
Oui, modéliser correctement la base de données .
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
Désolé pour cette réponse tardive mais j'étais occupé sur une autre mission et celle-ci été mise en suspens.
J'ai donc ajouté une colonne the_geom à toutes mes tables et je les ai updatées avec cette formule : Code :
UPDATE ma_table SET the_geom = ST_GeomFromText('POINT('||_long||' '|| _lat||')',4326); Soit : Citation:
Citation:
Sinon, concernant la requête elle-même, je suis parvenu à la réaliser via une jointure entre ma table insee_commune et les autres tables avec ce code : Code :
Étant donné que j'ai à chaque fois 5 tables de structures identiques (une par département de la région aquitaine), comment pourrais-je faire pour fusionner ces 5 tables et ainsi réaliser une seule requête sur cette "super table" plutôt que 5 requêtes sur 5 tables comme je le fait actuellement ? Quelle fonction dois-je utiliser. Merci |
||||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
J'ai bien avancé grâce à tous vos conseils et je vous en remercie.
Je voulais savoir si c'était possible d'updater une colonne à partir d'une colonne d'un fichier .csv créé sous excel ? J'ai essayé ça mais ça ne fonctionne pas : Code: Code :
UPDATE aquitaine_pylones_ftdit SET insee = 'C:/Program Files/PostgreSQL/9.0/Classeur2.csv' ; |
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Bonjour,
Pour charger le contenu d'un fichier CSV dans une table, il faut passer par la commande COPY. L'idée, c'est de charger ce fichier dans une table temporaire, puis de procéder à l'UPDATE par jointure entre la table à mettre à jour et la table temporaire issue du chargement du ficher CSV.
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
J'ai essayé ça :
Code :
En fait j'ai mes 196 lignes qui ne changent pas et il me rajoute 196 lignes contenant la colonne que je veux rajouter au lieu de modifier les 196 lignes déjà existantes. Je ne sais pas si c'est très clair |
||
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
C'est bien pour ça que j'ai parlé d'une mise à jour en 2 temps :
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
D'accord je testerais ça
|
|
|
00
|
|
|
#11 | ||||||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
J'ai essayé :
Code :
Citation:
et Code :
Citation:
|
||||||
|
|
00
|
|
|
#12 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Un UPDATE doit contenir une clause SET avec les champs à mettre à jour.
|
|
|
00
|
|
|
#13 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
Avec ce code ça a fonctionné :
Code :
|
||
|
|
00
|
|
|
#14 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
Je fais de nouveau appel à vous
Voila la fonction que je cherche à effectuer : Code :
|
||
|
|
00
|
|
|
#15 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Pour exécuter du SQL généré dynamiquement dans une fonction, il faut utiliser EXECUTE.
Voir la doc du langage plpgsql. |
|
|
00
|
|
|
#16 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
J'avais déjà essayé le EXECUTE mais ça ne fonctionnait pas :
Code :
Erreur suivante : ATTENTION: utilisation non standard de \' dans une chaîne littérale LINE 2: ' ^ HINT: Utilisez '' pour écrire des guillemets dans une chaîne ou utilisez la syntaxe de chaîne d'échappement (E'...'). ERREUR: erreur de syntaxe sur ou près de « '||cc||'' ;' » LINE 14: WHERE aquit_communes_2011.ca_cu_nom=\' ''||cc||''\' ;''); J'ai aussi essayé avec E' à la place de \' mais rien n'y fait ^ |
||
|
|
00
|
|
|
#17 | ||
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Ce n'est pas le EXECUTE qui pose problème, c'est la combinaison infernale d'apostrophes.
Pour éviter ça, il serait préférable d'adopter le style appelé 'dollar-quoting', c.a.d: Code :
Par ailleurs le EXECUTE a une clause USING pour lui passer des arguments variables de l'extérieur de la requête elle-même, ce qui permet encore de simplifier l'écriture. |
||
|
|
00
|
|
|
#18 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 11 ![]() |
Problème solutionné.
Nouveau problème J'ai dans mon fichier sql un Je voudrais récupérer la valeur du , à savoir Comcom, afin d'utiliser cela dans mon .bat. Comment est-ce possible ? De plus je souhaiterais pouvoir taper la variable "CA Le Marsan" dans le cmd afin de réaliser les requêtes sur ce que tape l'utilisateur. Dans mon fichier .bat j'ai écrit ça : Code :
MErci |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com