如何获取 postgresql 触发器函数中的列类型

How can I get type of column in postgresql trigger function

我想从 postgresql 触发器函数中获取列的类型。

此查询 returns 项类型:

Select pg_typeof(shape) from sde.my_points;

并且此查询 returns 几何类型:

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))

ERROR: invalid input syntax for type oid: "geometry"

QUERY: SELECT (SELECT pg_typeof(NEW.shape)) = ('geometry') AND GeometryType(NEW.shape) = ('POINT')

CONTEXT: PL/pgSQL function point_xy() line 7

如何在函数中使用?

pg_typeof() returns 一个 regtype 值,但是关联的 = 运算符可以比较 any 种 OID,所以另一边的值可能是一个类型,一个table,一个函数......字符串'geometry'不能自动解释为类型名称,所以你需要自己转换它.尝试:

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