gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:28:27 25 4
gpt4 key购买 nike

这是示例函数

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),或者在函数定义中设置search_path:_membershipStatus MemberStatus;

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

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

它在一段时间内运行良好的原因一定是您在 session 中设置了 search_path

关于从 C# 调用时,PostgreSQL 函数返回类型不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55135835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com