Message posté par : Nicolas Ribot
----------------------------------------
Bonjour,
Vous pouvez faire l'union des polygones des tables concernées (union au sens table), et avoir ainsi tous les polygones a traiter pour une commune:
-----------------
Code :
select geom from table1 UNION ALL
select geom from table2 UNION ALL
..
-----------------
Nicolas
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354966#p354966
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : La_methode
----------------------------------------
Salut Nicolas, je dispose d'une base de données contenant plusieurs schémas. Chaque schéma contient les même tables.
Il se trouve que j'ai besoin de d'automatiser le calcul de certains champ d'une table Y (j'ai au total 3 tables de ce type par schéma). Ce calcule a besoin de données qui se trouve dans une table X appartenant au même schéma que la table X.
Ne voulant pas définir un trigger pour chaque schéma et pour chaque table, je recherche un code qui me permettrait de faire la manœuvre.
J'ai donc introuduit les termes TG_TABLE_NAME et TG_SCHEMA_NAME car pensant qu'il peut a eux seul indexer le schéma et la table à laquelle qui sera indexée dans le trigger.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354954#p354954
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Sylvain Becquaert
----------------------------------------
Bonjour,
Je travaille sur une base PostGreSQL et j'aimerais pouvoir peupler une base de données avec des données EXIF extraite d'une photo.
Pour cela, je travaille avec un script Unix (shell) avec exiftool, ogr2ogr et psql.
Je sais demander les données EXIF d'une photo (exiftool maphoto.jpg).
J'aimerais pouvoir récupérer une donnée pour pouvoir la stocker dans une variable, qui pourrait donner ce genre de code (je sais que ce code n'est pas bon, mais c'est juste pour avoir une idée de la gueule du code que je cherche à produire)
-----------------
Code :
find -type . -iname \.jpg | while IFS=$'\n' read f ; do
nom_photo = $(basename "${f}")
focale = exiftool (donnée de la focale) ${f}
PGPASSWORD=${pass} psql -h ${host} -p ${port} -U ${user} ${base} -c 'INSERT INTO matable(nomphoto, focale) VALUES ('${nom_photo}', '${focale}')
done;
-----------------
Comment fait-on ?
Merci pour vos retours,
Sylvain
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354939#p354939
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : pierre0547
----------------------------------------
Bonjour,
Je suis cartographe, je souhaite me former et reprendre un peu les bases de Postgre SQL et Postgis pour m'auto former, car c'est quelque chose qui est demandé dans les offres d'emploi. J'aurai aimé savoir quels formations gratuites ou tutoriels vous me conseillerez?
Merci,
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354790#p354790
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : EliseWi
----------------------------------------
Bonjour à tous,
J'essaie de me connecter à un serveur distant sur lequel je voudrais stocker mes données.
Seulement, quand j'essaie de me connecter à celui-ci à partir de PgAdmin, je reçois le message d'erreur suivant "An error has occured: "server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.". Chose étrange, la connexion fonctionne sur Qgis. J'ai essayé d'appliquer les même options de connexion que celles de Qgis à PgAdmin (désactivation du mode SSL) mais ça ne change rien. J'ai bien comme settings de connexion listen_addresses = '*' dans mon fichier postgresql.conf.
Auriez-vous une idée de ce que je peux faire ?
Merci d'avance pour vos réponses :)
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354791#p354791
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Ricola62
----------------------------------------
Bonjour,
Les couches depuis mon geoserver sont bien importées en tant que tables distantes cependant certaines s'ouvrent correctement ( celles dont la source est une table postgis) et d'autres non avec l'erreur "ERROR: GDAL AppDefined [1] HTTP error code : 400 État SQL : XX000" ( celles dont la source est soit une vue postgis ou un flux WFS). POSTGRESQL="14" OGR_FDW="1.1" GDAL="3.2.2"
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354765#p354765
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Sébastien Morucci
----------------------------------------
Bonjour à tous,
J’ai essayé de trouver des réponses sur les forums et faire des tests sans succès donc je m’en remets à vous. Pour le contexte, on organise des concours de pronostiques avec des amis et cette année, je saute le pas de la base de données et du BI pour retranscrire les résultats.
J’ai une version 11 de Postgresql et je cherche à créer une fonction Trigger qui me permettra d’insérer, à chaque ajout de match dans la table top14, autant de lignes qu’il y a de pronostiqueurs dans la table pronostics_matchs tout en intégrant les informations de ces 2 tables.
J’ai une première table de pronostiqueurs :
-----------------
Code :
CREATE TABLE pronostiqueurs (
id_pronostiqueur varchar(20) NULL,
prenom varchar(50) NULL,
nom varchar(50) NULL
);
INSERT INTO pronostiqueurs
VALUES
('U1', 'Hendrix', 'Jimmy'),
('U2', 'Lennon', 'John'),
('U3', 'Dickinson', 'Bruce');
-----------------
Une seconde table de compétition Top14 (et ouais le monde de l'ovalie) :
-----------------
Code :
CREATE TABLE top14 (
id_match varchar(50),
competition varchar(30),
journee varchar(10),
num_match varchar(10),
equipe_dom varchar(30),
score_dom float8,
bonus_off_dom boolean,
equipe_ext varchar(30),
score_ext float8,
bonus_off_ext boolean,
date_match timestamp
);
-----------------
Une dernière table qui regroupe chacun des matchs dupliqués pour autant de pronostiqueurs :
-----------------
Code :
CREATE TABLE pronostics_matchs (
id_prono varchar(50),
id_match varchar(50),
competition varchar(30),
journee varchar(10),
num_match varchar(10),
id_pronostiqueur varchar(30),
equipe_dom varchar(30),
score_dom float8,
bonus_dom boolean,
equipe_ext varchar(30),
score_ext float8,
bonus_ext boolean
);
-----------------
Voilà la fonction trigger qui semble marcher à moitié car elle ne me renvoie qu’une seule ligne entièrement remplie :
-----------------
Code :
CREATE OR REPLACE FUNCTION ajouter_matchspronos()
RETURNS trigger AS
$BODY$
DECLARE
prono_rec RECORD;
BEGIN
FOR prono_rec IN SELECT id_pronostiqueur from pronostiqueurs
LOOP
insert into pronostics_matchs
(id_match,competition,journee,num_match,id_parieur,equipe_dom,equipe_ext)
VALUES(new.id_match,new.competition,new.journee,new.num_match, prono_rec.id_pronostiqueur, new.equipe_dom,new.equipe_ext);
return NEW;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
DROP TRIGGER ajouter_matchspronos ON top14;
CREATE TRIGGER ajouter_matchspronos AFTER INSERT
ON top14 FOR EACH ROW
EXECUTE PROCEDURE ajouter_matchspronos();
-----------------
Tentative d’insertion qui doit (théoriquement) venir alimenter la table pronostics_matchs en y intégrant les pronostiqueurs
insert into top14
-----------------
Code :
(competition,journee,num_match,equipe_dom,equipe_ext,date_match) values ('TOP14','J1','M1','RCT','ASM','2022-09-18 20:45:00')
-----------------
En vous remerciant grandement par avance pour vos lumières. Si vous souhaitez des précisions, je suis à votre service.
Bonne soirée
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354707#p354707
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Léandre Béron
----------------------------------------
Bonjour,
Nous travaillons sur des données des friches de notre collectivité.
Deux attributs sont présents :
- surf_tup : Surface du foncier
- idpar_tup : Liste des IDU des parcelles constituant la friche
Je souhaiterais donc mettre à jour ces informations de façon automatique.
Cela passe par une comparaison spatiale donc demande un minimum de temps. J'utilise un ST_PointOnSurface pour ne prendre uniquement les véritables parcelles qui constituent la friche et non celles voisines en plus.
J'ai d'abord mis en place le process sur un TRIGGER BEFORE ISNERT OR UPDATE qui fonctionne mais qui est extrêmement long.
J'aurais donc souhaité passer sur un AFTER INSERT OR UPDATE en pensant diminuer le temps d'enregistrement pour l'utilisateur.
J'ai donc mis en place ceci :
-----------------
Citation :
CREATE FUNCTION schema.table_saisi_auto()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
-- champs automatisés
NEW.sit_datmaj = current_date;
-- CALCUL SOMME SURFACE CADASTRE DES PARCELLES QUI SONT CONCERNEES PAR LA FRICHE (INTERSECT FRICHE AVEC POINT ON SURFACE PARCELLE)
NEW.surf_tup = SUM("SUPF")
FROM cadastre."PARCELLE" par
WHERE ST_Intersects(ST_PointOnSurface(NEW.geom),par."GEOM");
-- LISTE LES PARCELLES QUI SONT DANS CETTE FRICHE
NEW.idpar_tup = string_agg(parc."IDU", ', '::text)
FROM cadastre."PARCELLE" parc
WHERE ST_Intersects(ST_PointOnSurface(parc."GEOM"), NEW.geom);
RETURN NEW;
END;
$BODY$;
-- CREATION DES TRIGGERS
CREATE TRIGGER schema_table_control_saisi
BEFORE INSERT OR UPDATE
ON schema.table
FOR EACH ROW
EXECUTE PROCEDURE schema.table_control_saisi();
CREATE TRIGGER table_saisi_auto
AFTER INSERT OR UPDATE
ON schema.table
FOR EACH ROW
EXECUTE PROCEDURE schema.table_saisi_auto();
-----------------
Aucune erreur lors de l'enregistrement d'une modification géométrique sous QGIS, mais temps de chargement très long + ne se passe rien dans les 2 champs en question.
--> Egalement, comment optimiser la mise à jour de ces informations ? Le cadastre utilisé est sur 466 communes et nous travaillons sur 39 communes. Définir une table spécifique des parcelles (avec le millésime) uniquement sur ces 39 communes me ferait-il gagner un temps non négligeable ? Le trigger ne devrait plus à passer toutes les parcelles mais beaucoup moins, non ?
--> Je peux aussi passer par une vue qui reconstitue ces deux informations (et n'ayant donc plus besoin de les faire disposer sur ma table), mais sera-t-elle plus performante ?
Bien Cordialement,
Léandre Béron
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354689#p354689
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : philippe_schitter (philippe.schitter(a)gmail.com)
----------------------------------------
Bonjour,
Suite à votre discussion et sur la même logique, je rencontre une erreur que je n'arrive pas à résoudre.
Je travaille dans les télécom et je souhaite diviser une table de câbles "CB" en x tables en fonction des x valeurs uniques du champ "mode_pose".
Après consultation des tutoriels et forums, j'ai rédigé en PL/pgSQL le code copié ci-dessous :
-----------------
Code :
CREATE OR REPLACE FUNCTION split_CB() RETURNS VARCHAR as $$
DECLARE
x VARCHAR;
BEGIN
FOR x IN SELECT DISTINCT CB."mode_pose"
FROM "syane_test"."CB" CB
LOOP
EXECUTE format('
DROP TABLE IF EXISTS syane_test.CB_'||x||';
CREATE TABLE syane_test.CB_'||x||' AS
SELECT *
FROM "syane_test"."CB" CB
WHERE CB."mode_pose" ='||quote_literal(x)||';');
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT split_CB();
-----------------
et je me suis heurté à un message d'erreur suivant :
"""
NOTICE: la table « cb_aerien » n'existe pas, poursuite du traitement
CONTEXT: instruction SQL «
DROP TABLE IF EXISTS syane_test.CB_AERIEN;
CREATE TABLE syane_test.CB_AERIEN AS
SELECT *
FROM "syane_test"."CB" CB
WHERE CB."mode_pose" ='AERIEN'; »
fonction PL/pgsql split_cb(), ligne 9 à EXECUTE
NOTICE: la table « cb_immeuble » n'existe pas, poursuite du traitement
CONTEXT: instruction SQL «
DROP TABLE IF EXISTS syane_test.CB_IMMEUBLE;
CREATE TABLE syane_test.CB_IMMEUBLE AS
SELECT *
FROM "syane_test"."CB" CB
WHERE CB."mode_pose" ='IMMEUBLE'; »
fonction PL/pgsql split_cb(), ligne 9 à EXECUTE
NOTICE: la table « cb_souterrain » n'existe pas, poursuite du traitement
CONTEXT: instruction SQL «
DROP TABLE IF EXISTS syane_test.CB_SOUTERRAIN;
CREATE TABLE syane_test.CB_SOUTERRAIN AS
SELECT *
FROM "syane_test"."CB" CB
WHERE CB."mode_pose" ='SOUTERRAIN'; »
fonction PL/pgsql split_cb(), ligne 9 à EXECUTE
ERREUR: le contrôle a atteint la fin de la fonction sans RETURN
CONTEXT: fonction PL/pgsql split_cb()
********** Erreur **********
ERREUR: le contrôle a atteint la fin de la fonction sans RETURN
État SQL :2F005
Contexte : fonction PL/pgsql split_cb()
"""
Pouvez-vous m'aider à résoudre cette erreur ?
Et si oui, dans la foulée, est-il possible d'intégrer aux nouvelles tables, la création en boucle de Contraintes de clé primaire ?
Merci par avance, bien cordialement.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354464#p354464
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Fabrice1234 (fabrice.neubert(a)gmail.com)
----------------------------------------
Bonjour à tous ,
Nouveau utilisateur de PostgreSQL , j'ai un problème lorsque j'exécute des fonctions : je souhaiterais récupérer les données d'une table déjà existante , qui ne comporte qu'une seule ligne , et qui contient tout les paramètres que je veux exploiter en tant que variables au sein de ma fonction .
Lorsque la table contenant les paramètres sera mise à jour , les variables de ma fonction doivent donc être mises à jour également .
Seulement , je n'arrive pas à trouver la syntaxe exacte pour faire appel à ces données : j'ai d'abord essayé d'indiquer uniquement le nom de la colonne dans ma fonction , mais j'obtiens un message d'erreur m'indiquant que la colonne n'est pas reconnue , j'ai essayé ensuite d'utiliser la syntaxe nom_de_table.nom_de_colonne pour reprendre la syntaxe qu'on utilise lorsque l'on fait des jointures entre les tables , mais j'obtiens un message d'erreur m'indiquant qu'il manque une clause "FROM " dans ma fonction .
En dernier recours , j'ai essayé d'utiliser la syntaxe NEW.nom_de_la_colonne , je n'obtiens pas de message d'erreur dans ce cas précis mais le code semble ne pas reconnaitre la valeur de la colonne que je souhaite utiliser puisqu'il fonctionne alors comme si mes paramètres valaient zéro .
Cependant , mon code fonctionne pour des valeurs discrètes ( en rentrant les paramètres manuellement ) .
Ci joint , vous trouverez le code que je souhaite réaliser : le but étant de créer un réseau de table de panneaux photovoltaïques en fonction des différents paramètres du réseau ( dimensions des panneaux , distance inter-rangée , inter-table , nombre de panneaux en longueur , nombre de panneaux en hauteur )
(PS : la table que je souhaite utiliser est défini par : parametrage_table ( id_parametrage_table SERIAL PRIMARY KEY , inter_rang REAL , inter_table REAL , longueur INT , hauteur INT , ht_table REAL ,l_table REAL )
CREATE OR REPLACE FUNCTION generer_tables() RETURNS TRIGGER AS $gt$
DECLARE
line_no int:= 0;
column_no int:= 0;
x real :=0;
y real :=0;
l_table real :=parametrage_table.l_table;
ht_table real :=parametrage_table.ht_table;
increment_x real :=0;
increment_y real :=0;
nom_polygone text :='' ;
hauteur int := parametrage_table.hauteur;
longueur int := parametrage_table.longueur ;
inter_rang real :=parametrage_table.inter_rang ;
inter_table real :=parametrage_table.inter_table ;
BEGIN
DROP TABLE referencement_tables ;
CREATE TABLE referencement_tables(id_table SERIAL primary KEY,geom geometry);
WHILE (line_no< hauteur) loop
WHILE (column_no< longueur) loop
column_no := column_no +1 ;
increment_x :=x+l_table ;
increment_y :=y+ht_table ;
nom_polygone := 'POLYGON'||'(('|| x ||' '|| y ||','||increment_x ||' '|| y ||','||increment_x||' '||increment_y||','||x||' '||increment_y||','||x||' '||y||'))' ;
INSERT INTO referencement_tables(geom)
VALUES(ST_GeometryFromText(nom_polygone));
x:= x+l_table+ inter_table;
nom_polygone :='';
END LOOP;
column_no :=0;
x:=0;
line_no :=line_no+1 ;
y:=y+ht_table+inter_rang;
END LOOP;
return NEW;
END;
$gt$ language plpgsql ;
Merci d'avance , Fabrice
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354319#p354319
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net