从 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
。
这是示例函数
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
。