我想从postgresql触发器函数中获取列类型。
此查询返回项目类型:
Select pg_typeof(shape) from sde.my_points;
此查询返回几何类型:
Select GeometryType(shape) from sde.my_points;
我想在postgresql触发器函数中使用这些部分:
CREATE FUNCTION point_xy() RETURNS trigger AS $point_xy$
BEGIN
IF (SELECT pg_typeof(NEW.shape)) = ('geometry')
AND GeometryType(NEW.shape) = ('POINT')
THEN
NEW.x = st_x(NEW.shape);
NEW.y = st_y(NEW.shape);
END IF;
END IF;
RETURN NEW;
END
$point_xy$ LANGUAGE plpgsql;
此函数在此行(SELECT pg_typeof(NEW.shape))
中给出错误。
错误:类型为oid的输入语法无效:“geometry”
QUERY:SELECT(SELECT pg_typeof(NEW.shape))=('geometry') AND GeometryType(NEW.shape)=('POINT')
上下文:PL / pgSQL函数point_xy()第7行
我如何在函数中使用?
答案 0 :(得分:2)
pg_typeof()
返回regtype
值,但关联的=
运算符可以比较任何类型的OID,因此另一方的值可能是类型,表格,函数......字符串'geometry'
不能自动解释为类型名称,因此您需要自己进行转换。尝试:
pg_typeof(NEW.shape) = 'geometry'::regtype