J'ai vu beaucoup de messages comme le mien, mais je n'ai pas réussi à trouver une réponse appropriée à ma situation, qui devrait être basique je présume. J'utilise l'extension PostGIS 2.3. Voici mon code:PostgreSQL 9.5: entrée de clause FROM manquante pour la table "new"
CREATE OR REPLACE FUNCTION public.split_cable()
RETURNS trigger AS
$BODY$
DECLARE geometrie geometry;
BEGIN
geometrie = new.geom;
create view temp_wire as (
with brs as (select boite.geom from cablage_pays_gex.boite
where st_intersects(boite.geom, new.geom) and boite.geom not in (select st_startpoint(st_linemerge(new.geom))) and boite.geom not in (select st_endpoint(st_linemerge(new.geom)))
)
select st_dump(st_split(new.geom, brs.geom)) from brs
);
RETURN new;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
Comme vous pouvez le voir, j'ai une variable « geometrie » que je ne l'utilise, c'est parce que j'ai essayé de déclarer une variable contenant les données que je veux utiliser, sans succès. L'erreur que j'obtiens est celle qui titille ma question, et elle pointe vers la fonction st_intersects() (donc la première fois que j'essaie d'appeler le nouveau .geom). Qu'est-ce que je fais mal? Et comment puis-je résoudre cela?
EDIT: Voici la déclaration create table sur laquelle le déclencheur agit:
CREATE TABLE public.cable2
(
id_cable integer NOT NULL DEFAULT nextval('cable2_seq'::regclass),
geom geometry(MultiLineString,2154),
CONSTRAINT cable2_pkey PRIMARY KEY (id_cable)
);
Montrez-nous l'instruction 'create table' pour la table de déclenchement. Mais créer une vue dans un déclencheur est un ** vraiment **, une très mauvaise idée - et il échouera après la deuxième instruction DML sur la table sous-jacente. Ce qui signifie que vous ne pouvez exécuter qu'une seule instruction DML une seule fois, puis plus jamais parce que vous obtiendrez une erreur pour chaque instruction suivante. –
@a_horse_with_no_name Vous ne savez pas exactement ce que vous voulez dire. Je suis principalement en utilisant QGIS logiciel tiers pour interagir avec la base de données, donc je n'utilise aucune déclaration. Voulez-vous dire l'instruction 'create trigger'? –
Ensuite, ce logiciel tiers cessera de fonctionner car votre déclencheur échouera après la première instruction DML contre cette table. Pour savoir ce qui ne va pas avec votre trigger, nous devons voir l'instruction 'create table' pour la table sur laquelle vous définissez le trigger. –