这是示例函数
CREATE OR REPLACE FUNCTION "Membership".status2(membershipid text)
RETURNS "Membership".memberstatus
LANGUAGE plpgsql
AS $function$
declare
_membershipStatus MemberStatus;
total integer;
typeId integer;
startDate date;
endDate date;
groupId integer;
membershipStatus varchar;
BEGIN
Select "TypeId", "StartDate","EndDate" into typeId, startDate, endDate from "Membership"."Memberships" M where M."MembershipId" = membershipId;
if endDate > NOW() then
_membershipStatus.groupid = 3;
_membershipStatus.membershipstatus = 'Expired';
end if;
RETURN _membershipStatus;
END;
$function$
;
昨天我通过
致电时,此方法很好select status2('gwgwg');
今天我开始执行,突然间被调用
select "Membership".status2('sdgsd');
我得到
SQL错误[42704]:错误:类型“ memberstatus”不存在
我当然尝试添加“ Membership” .memberstatus,但结果相同。
从昨天开始,什么都没有改变,当我进行测试时,一切正常。
我不明白为什么它会再次消失?
我已经遇到了这个问题,由于某种原因,所有数据类型都消失了一段时间(在X分钟内正常工作之后)。它们仍然处于模式数据类型中,但是找不到...(?)
顺便说一句 当我尝试删除数据类型时,我将获得该函数所依赖的信息...但是该函数找不到它(起初工作正常)。
答案 0 :(得分:2)
我认为这是一个search_path
问题。
要么更改声明
_membershipStatus MemberStatus;
,以便数据类型符合架构要求("Membership".memberstatus
),或在函数定义中设置search_path
:_ membershipStatus MemberStatus;
ALTER FUNCTION "Membership".status2(text) SET search_path = "Membership";
如果您不使用大小写混合的标识符,那么您的SQL将会更简单。
之所以能够在一段时间内正常工作,一定是因为您在会话中设置了search_path
。