Eu preciso criar várias visualizações em dados geoespaciais, cada uma explicitamente lançada para a geometria correta e gostaria de criar um procedimento auxiliar para fazer isso assim:
CREATE PROCEDURE create_view_events(
view_name TEXT, event_type TEXT, geo_type TEXT
) LANGUAGE plpgsql AS $$
BEGIN
EXECUTE FORMAT('
CREATE VIEW %I AS
SELECT
id,
geom::%I AS geom -- casting required, but how?
FROM events
WHERE type = %L
', view_name, geo_type, event_type);
END $$;
CALL create_view_events('events_viewX', 'X', GEOMETRY(POINT, 3347));
Executar manualmente a CREATE VIEW
instrução com a conversão substituída para geom::GEOMETRY(POINT, 3347) AS geom
funciona e executar o procedimento sem a conversão também funciona. No entanto, chamar através do procedimento como está gera esse erro, não sei o que está acontecendo.
ERROR: missing FROM-clause entry for table "GEOMETRY(POINT, 3347)"
Where: PL/pgSQL function create_view_events(text,text,text) line 7 at EXECUTE
Resolvido passando os argumentos do
GEOMETRY(obj, crs)
tipo separadamente para o procedimento.⚠️ Mas ainda gostaria de saber como passar os tipos compostos diretamente.