问题描述:
sys_guid函数默认返回的是16进制的串的ascii编码,通过修改参数guid_default_return_type=name,可以返回16进制字符串,但修改参数时,会发现参数实际已修改,但没效果。
分析与解决方法:
以上问题是由于修改过程没有运行alter_sys_guid()函数导致的。修改过程如下:
修改参数guid_default_return_type;
重启数据库;
执行 select alter_sys_guid()。这个实际是重建sys_guid()函数,根据参数guid_default_return_type决定是调用sys_guid_bytea,还是调用sys_guid_name。
Alter_sys_guid 函数的内容:
begin
select setting into return_type from sys_catalog.sys_settings where name = 'guid_default_return_type';
if lower(return_type) = 'bytea' then
stmt = 'DROP FUNCTION IF EXISTS sys_catalog.sys_guid();
CREATE OR REPLACE INTERNAL FUNCTION sys_catalog.sys_guid() RETURNS BYTEA AS
$$SELECT sys_catalog.sys_guid_bytea()$$ LANGUAGE sql;';
else
stmt = 'DROP FUNCTION IF EXISTS sys_catalog.sys_guid();
CREATE OR REPLACE INTERNAL FUNCTION sys_catalog.sys_guid() RETURNS NAME AS
$$SELECT sys_catalog.sys_guid_name()$$ LANGUAGE sql;';
end if;
end;
注意
对于R6 版本,没有alter_sys_guid,需要手动修改创建脚本。