从 C# 调用时,PostgreSQL 函数 returns 类型不存在

PostgreSQL function returns type does not exist when called from C#

这是示例函数

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');

今天开始执行突然调用using

select "Membership".status2('sdgsd');

我得到

SQL Error [42704]: ERROR: type "memberstatus" does not exist

当然我尝试添加 "Membership".memberstatus 但结果相同。

自昨天以来没有任何变化,当我测试它时,它工作正常。

不明白为什么又消失了???

我已经遇到了这个问题,出于某种原因,一段时间后所有数据类型都消失了(在正常工作 X 分钟后)。它们仍在模式数据类型中,但未找到... (?)

顺便说一句 当我尝试删除数据类型时,我会得到函数依赖于它的信息......但函数找不到它(一开始它工作正常)。

我认为这是一个 search_path 问题。

要么更改声明

_membershipStatus MemberStatus;

使数据类型为架构限定 ("Membership".memberstatus),或在函数 definition:_membershipStatus MemberStatus 中设置 search_path

ALTER FUNCTION "Membership".status2(text) SET search_path = "Membership";

如果您不使用大小写混合标识符,您的 SQL 会不那么复杂。

之所以在一段时间内运行良好,一定是因为您在会话中设置了 search_path