Postgis: crear columna con srid en procedimiento
Hola,
Me pregunto cómo podría crear una columna espacializada con un srid obtenido de la base de datos.
— OK —
ALTER TABLE POI ADD COORDS GEOMETRY(POINT, 26916);
— KO (sintaxis de entrada no válida para el tipo entero: "sridval") —
DO $$
DECLARE
sridval int;
BEGIN
sridval := (select srid FROM project_options);
ALTER TABLE POI ADD COORDS GEOMETRY(POINT, sridval);
END$$;
— OK pero verboso —
DO $$
DECLARE
sridval int;
BEGIN
ALTER TABLE POI ADD COORDS GEOMETRY(POINT);
sridval := (select srid FROM project_options);
PERFORM updategeometrysrid(‘POI’, ‘coords’, sridval);
END $$;
La última solución no funciona con columnas generadas. Por ejemplo:
ALTER TABLE POI ADD COORDS GEOMETRY(POINT, /¿colocar el srid aquí?/) generated always as (ST_MakePoint(longitude, latitude)) stored;
CREATE INDEX COORDS_IDX ON POI USING GIST (COORDS);
davy.ai
Para crear una columna espacializada con un SRID obtenido de la base de datos, se puede utilizar el siguiente código:
Este código utiliza SQL dinámico concatenando el valor SRID en la sentencia ALTER TABLE. Esto permite obtener el SRID de la base de datos y utilizarlo en la creación de la columna espacializada.
Alternativamente, si se necesita una columna generada, se puede crear sin un SRID y luego utilizar la función PERFORM updategeometrysrid para establecer el SRID:
Este código primero crea la columna generada sin un SRID, luego utiliza la función PERFORM updategeometrysrid para establecer el SRID al valor obtenido de la base de datos. Finalmente, se crea un índice en la columna COORDS utilizando GIST.