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

如何获取postgresql触发器函数中的列类型,postgresql,postgresql-9.5,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

我想从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;
此函数给出错误,在这一行
(选择pg_typeof(NEW.shape))

错误:oid类型的输入语法无效:“几何体”

查询:选择(选择pg_typeof(NEW.shape))=(“几何体”) 和GeometryType(NEW.shape)=('POINT')

上下文:PL/pgSQL函数point_xy()第7行

如何在函数中使用?

pg_typeof()
返回一个值,但关联的
=
运算符可以比较任何类型的OID,因此另一侧的值可以是一个类型、一个表、一个函数。。。字符串
'geometry'
无法自动解释为类型名,因此您需要自己强制转换它。尝试:

pg_typeof(NEW.shape) = 'geometry'::regtype
pg_typeof()
返回一个值,但关联的
=
运算符可以比较任何类型的OID,因此另一侧的值可以是一个类型、一个表、一个函数。。。字符串
'geometry'
无法自动解释为类型名,因此您需要自己强制转换它。尝试:

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

错误是什么?更新的错误代码。错误是什么?更新的错误代码。顺便说一下,不需要
选择
,只要
如果pg_typeof(NEW.shape)='geometry'::regtype和GeometryType(NEW.shape)='POINT然后…
顺便说一句,不需要
选择
,只要
如果pg_typeof(NEW.shape)='geometry'::regtype和GeometryType(NEW.shape)=“POINT”然后…