如何在postgresql触发器函数

时间:2018-01-17 09:19:05

标签: postgresql postgresql-9.5

我想从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行

我如何在函数中使用?

1 个答案:

答案 0 :(得分:2)

pg_typeof()返回regtype值,但关联的=运算符可以比较任何类型的OID,因此另一方的值可能是类型,表格,函数......字符串'geometry'不能自动解释为类型名称,因此您需要自己进行转换。尝试:

pg_typeof(NEW.shape) = 'geometry'::regtype