如何获取 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
我想从 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