PostgreSQL获得任意值的数据类型使用的系统函数是 pg_typeof,例如方法如下:
select
pg_typeof(null),
pg_typeof(3),
pg_typeof(3.0),
pg_typeof(float8(3.0)),
pg_typeof(float4(3.0)),
pg_typeof('hello'),
pg_typeof(array['unknown'])
pg_typeof的返回类型regtype,regtype指向系统表pg_type的oid字段。因此我们要判断数据类型时可采用下列方法
# step 1 记录目标类型的值
select oid from pg_type where oid=pg_typeof(array['unknown']);
select oid from pg_type where oid=pg_typeof('hello'::text);
--或者
select pg_typeof('hello'::text)::regtype::oid,pg_typeof(array['unknown'])::regtype::oid;
# step 2 判断数据类型
select 25=pg_typeof('hello'::text),1009=pg_typeof(array['unknown']);
下面的方法比较无语,不要使用
CREATE OR REPLACE FUNCTION isnumeric(text) RETURNS BOOLEAN AS $$
DECLARE x NUMERIC;
BEGIN
x = $1::NUMERIC;
RETURN TRUE;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;
$$
STRICT
LANGUAGE plpgsql IMMUTABLE;