add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
CREATE TABLE pipes (id int, geom geometry(multilinestring),geom_closest_downstream geometry(multipoint,2965), geom_closest_upstream geometry(multipoint,2965));
CREATE TABLE structures (id int, geom geometry(multipoint));

INSERT INTO structures VALUES
(1,'0104000020950B00000100000001010000001026FA48113B07410D6A8412CF1D3D41'),
(2,'0104000020950B0000010000000101000000BA1BF246E6DD0741D064CB58C2E43C41');
CREATE TABLE
CREATE TABLE
INSERT 0 2
CREATE OR REPLACE FUNCTION insert_pipe() RETURNS TRIGGER AS $$
BEGIN
SELECT
j.geom_closest_downstream,
i.geom_closest_upstream
INTO NEW.geom_closest_downstream, NEW.geom_closest_upstream
FROM ST_Dump(NEW.geom) dump_line,
LATERAL (SELECT s.geom
FROM structures s
ORDER BY ST_EndPoint((dump_line).geom)<->s.geom
LIMIT 1) j (geom_closest_downstream),
LATERAL (SELECT s.geom
FROM structures s
ORDER BY ST_StartPoint((dump_line).geom)<->s.geom
LIMIT 1) i (geom_closest_upstream);
RETURN NEW;
END; $$ LANGUAGE plpgsql;

CREATE TRIGGER t_insert_pipe
BEFORE INSERT OR UPDATE ON pipes FOR EACH ROW EXECUTE PROCEDURE insert_pipe();

CREATE FUNCTION
CREATE TRIGGER
INSERT INTO pipes VALUES
(1,'0105000020950B00000100000001020000000200000046243EC3282608418D28242D6C1B3D4128531BE88A2608418284B3EF561B3D41'),
(2,'0105000020950B0000010000000102000000020000004ABF2CBC86B108413B93650696323D413C487924CCB10841925D490495323D41');
INSERT 0 2
SELECT * FROM pipes;
id geom geom_closest_downstream geom_closest_upstream
1 0105000020950B00000100000001020000000200000046243EC3282608418D28242D6C1B3D4128531BE88A2608418284B3EF561B3D41 0104000020950B00000100000001010000001026FA48113B07410D6A8412CF1D3D41 0104000020950B00000100000001010000001026FA48113B07410D6A8412CF1D3D41
2 0105000020950B0000010000000102000000020000004ABF2CBC86B108413B93650696323D413C487924CCB10841925D490495323D41 0104000020950B00000100000001010000001026FA48113B07410D6A8412CF1D3D41 0104000020950B00000100000001010000001026FA48113B07410D6A8412CF1D3D41
SELECT 2