我需要在地理空间数据上创建多个视图,每个视图都显式转换为正确的几何图形,我想创建一个辅助程序来这样做:
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));
手动运行将CREATE VIEW
替换为铸件的语句并 geom::GEOMETRY(POINT, 3347) AS geom
运行没有铸件的程序也可以。但是,按原样调用该过程会产生此错误,我不知道发生了什么。
ERROR: missing FROM-clause entry for table "GEOMETRY(POINT, 3347)"
Where: PL/pgSQL function create_view_events(text,text,text) line 7 at EXECUTE
通过将类型的参数分别传递给过程来解决它
GEOMETRY(obj, crs)
。⚠️ 但是还是想知道如何直接传递复合类型。