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
Message posté par : EliseWi
----------------------------------------
Bonjour à tous,
Je travaille actuellement sur une base de données Postgres (en utilisant PgAmin 4). Savez-vous comment je peux rendre un champ non éditable ? J'ai créé des trigger pour que certains champs se remplissent automatiquement quand on crée une entité sur Qgis et j'aimerai que ces champs apparaissent grisés (non remplissables) lorsqu'une personne crée une nouvelle entité sur Qgis.
J'ai testé de décocher l'option 'editable' de ces champs directement dans Qgis mais quand je recharge la couche, cette option est à nouveau cochée.
Merci d'avance pour votre aide :)
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354191#p354191
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 : Benjamin B
----------------------------------------
Bonjour,
J'ai un petit soucis,
J'ai deux tables, et je souhaiterai que lorsqu'un enregistrement de la première table est complété, il y ai copie vers une deuxième table de l'enregistrement mis à jour.
J'ai fait un trigger en before update for each row
ok j'ai du mal avec les trigger....
mais mon insert into ne passe pas.
Pouvez vous m'aider car je ne vois pas ou cela cloche?
-----------------
Code :
create or replace TRIGGER SIR_ARBRE_V2_ENT_FAIT_UP
after update ON SIR_ARBRE_ENTRETIEN_FUTUR FOR EACH ROW
declare
CODE_ENT NUMBER(10):=0;
O_ID NUMBER(10):=0;
begin
if (:NEW.ID_ARBRE_ALIGNEMENT_GLD <> :OLD.ID_ARBRE_ALIGNEMENT_GLD ) then
select CODE_ENTRETIEN_FUTUR into CODE_ENT from SIR.SIR_ARBRE_ENTRETIEN_FUTUR ;
SELECT max(ID_ARBRE_ENTRETIEN_FAIT)+1 into O_ID from SIR.SIR_ARBRE_ENTRETIEN_FAIT;
insert into SIR_ARBRE_ENTRETIEN_FAIT (ID_ARBRE_ENTRETIEN_FAIT,CODE_ENTRETIEN_FAIT) VALUES (O_ID,CODE_ENT);
insert into SIR_ARBRE_ENTRETIEN_FAIT (ID_ARBRE_ENTRETIEN_FAIT) SELECT max(ID_ARBRE_ENTRETIEN_FAIT)+2 from SIR.SIR_ARBRE_ENTRETIEN_FAIT ;
END if;
END ;
-----------------
Par avance merci pour toute aide, car je tourne en rond et ne voit pas mon erreur.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=354154#p354154
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 (williart.elise(a)gmail.com)
----------------------------------------
Bonjour à tous,
Je travaille actuellement sur une base de données Postgres (en utilisant PgAmin 4). Je m'interroge sur la gestion des connexions simultanées et les modifications d'une même entité par différents utilisateurs en même temps. Je me suis informée sur les différentes solutions tels que les verrous et l'isolation des transactions, ainsi que la solution directe dans les paramètres de Qgis présentée dans ce post https://georezo.net/forum/viewtopic.php?id=126396 (les personnes utilisant la base le faisant principalement directement sur Qgis). Je ne suis pas vraiment sure d'avoir bien compris les principes de verrous et transactions.
Y-a-t'il un moyen de généraliser par exemple le fait que tous les updates soient sérialisables dans une base de données? De ce que j'ai compris, il faut indiquer dans la transaction directement qu'elle est sérialisable. Y a-t'il un moyen de dire que si 2 utilisateurs lancent chacun un update à quelques secondes de suite, alors il faut que le premier update soit finit pour que le deuxième se lance ? Sans qu'ils aient besoin de le spécifier dans une transaction.
Merci d'avance pour vos réponses et n'hésitez pas à me dire si je n'ai pas été claire :)
Bonne journée !
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=353697#p353697
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 : samirovic04 (samire.maghafri24(a)gmail.com)
----------------------------------------
Bonjour à tous,
Dans le cadre de la réalisation de mon projet de stage je dois remonter des données d'un automate à une base de données dans le cloud ( machine virtuelle). du coup pour faire cela je dois passer par un routeur VPN pour interroger la base de données cloud.
AUTOMATE(192.168.1.99)===>(RouteurVPN)(10.0.8.120)===>INTERNET====>(Base de données)100.96.13.34
sur l'automate j'ai mis l'adresse IP de la base de données mais j'ai toujours un message d'erreur : could not connect to server: Connection timed out
Is the server running on host "100.96.13.34" and accepting TCP/IP connections on port 5432? sachant que le port 5432 est ouvert.
Merci de vos réponses
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=353400#p353400
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 : caparros (nicolas.caparros(a)audrna.com)
----------------------------------------
Bonjour à tous
je souhaite avec l'aide de pgrouting connaitre un itinéraire, je fait cette requête :
select seq, path_seq, node, edge,di.cost, agg_cost,the_geom
FROM pgr_dijkstra(
('SELECT id , source::int, target::int, round(st_length(geom))::int as cost from network')::text,
1480, 1481,true) as di
JOIN node pt
ON di.id = pt.id;
et je reçois ce message :
ERROR: ERREUR: la colonne toto.id n'existe pas
LINE 6: ON di.id = pt.id;
J'ai beau retourner la requête dans tous les sens je n'arrive pas obtenir un résultat
Auriez vous déjà rencontré ce problème ?
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=353745#p353745
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