postgresql Npgsql.PostgresException:42P01:关系“表”不存在

sshcrbum  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(676)

我尝试使用c#和Npgsql自动生成INSERT语句,以便从给定的名称和产品列表填充表。一切都运行良好,所以我决定添加两个触发器,这是这个项目所需要的。触发器相对简单,但在sql控制台上测试时,它们的性能非常完美。然后,当我最终认为我完成了赋值时,我用C#中的自动填充方法再次测试了它。我得到了一个错误:
Npgsql.PostgresException:42 P01:关系“买方”不存在
我决定再次在控制台上测试它,使用完全相同的INSERT语句,它从一开始就应该工作。在花了3- 4个小时的谷歌搜索和找到很少或没有答案之后,我禁用了所有触发器,然后c#脚本没有任何问题地工作。
所以,总结一下,当在控制台中输入时,查询可以完美地处理触发器,但当在C#中使用时,它不能找到表。

CREATE OR REPLACE FUNCTION "TBP_ERA".trigger_dohvati_prvi_datum()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
BEGIN
  insert into "TBP_ERA".order(orderer,productname,productquantity) 
select buyer.id,buyer.productname,buyer.productquantity from buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;

而触发器本身:

create
    trigger dohvati_datum after insert
        on
        "TBP_ERA".buyer for each row execute procedure trigger_dohvati_prvi_datum();

编辑:C#部分的INSERT代码

connection.Open();
            NpgsqlCommand command = new NpgsqlCommand("INSERT INTO \"TBP_ERA\".buyer(ID,name,productname,productquantity,ordercompleted)" +
                " VALUES(default,'" + buyer.Name + "','" + buyer.ProductName + "'," + buyer.ProductQuantity+",0);", connection);
            try
            {
                command.ExecuteNonQuery();
            }
            catch (NpgsqlException ex)
            {
                string nekej = ex.ToString();
                throw;
            }

            connection.Close();
2ic8powd

2ic8powd1#

尝试在触发器函数中对buyer进行架构限定。

CREATE OR REPLACE FUNCTION "TBP_ERA".trigger_dohvati_prvi_datum()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
BEGIN
  insert into "TBP_ERA".order(orderer,productname,productquantity) 
select buyer.id,buyer.productname,buyer.productquantity from "TBP_ERA".buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;
jucafojl

jucafojl2#

在我的例子中,当我运行数据库函数时,会出现此错误,并且在此函数中,我在表名称中犯了错误。我粘贴了函数名称,而不是实体化视图名称。检查您的函数体,逐行运行,您会发现错误

相关问题