【问题标题】:PostgreSQL function returns type does not exist when called from C#从 C# 调用时,PostgreSQL 函数返回类型不存在
【发布时间】:2019-08-03 18:32:46
【问题描述】:

这是示例函数

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 分钟后)。它们仍在模式数据类型中,但找不到...(?)

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

【问题讨论】:

  • 我强烈建议不要在 SQL 语句中使用双引号。
  • 我希望,但如果没有它,它通常不会找到架构/表。我发现用双引号不存在问题
  • 你不应该使用双引号来创建它们。

标签: postgresql plpgsql


【解决方案1】:

我认为这是search_path 问题。

要么更改声明

_membershipStatus MemberStatus;

使数据类型为模式限定("Membership".memberstatus),或在函数定义中设置search_path:_membershipStatus MemberStatus;

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

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

一时能正常工作的原因一定是你在会话中设置了search_path

【讨论】:

  • 我已尝试添加完整的架构名称。查询已执行,但该部分代码中的功能根本没有改变。搜索路径技巧奏效了!谢谢!
  • 你能解释一下那个评论吗?我不明白。你的问题解决了吗?
  • 当然,基本上我已经改变了_membershipStatus MemberStatus; to _membershipStatus "会员".MemberSatus;运行后它没有改变。我已经删除了该功能并使用新代码重新创建,同样发生了“会员”。丢失(但是在代码的其他部分中存在)。我刚开始使用 PostgreSQL,似乎我的软件表现得很奇怪(一次有效,另一次无效,等等)。作为问题,有一次它找到了 MemberStatus,20-30 分钟后没有找到(相同的窗口,相同的应用程序实例)。
  • 哦,是的,问题通过设置search_path解决了。
猜你喜欢
  • 1970-01-01
  • 2017-08-18
  • 2011-01-03
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多