&引用;“关系不存在”;Postgresql

&引用;“关系不存在”;Postgresql,postgresql,Postgresql,我有一个错误: --------------------------- pgAdmin III --------------------------- An error has occurred: ERROR: relation "vettura_tariffa" does not exist LINE 2: from vettura_tariffa ^ QUERY: SELECT ( select valore

我有一个错误:

---------------------------
pgAdmin III
---------------------------
An error has occurred:

ERROR:  relation "vettura_tariffa" does not exist
LINE 2:     from vettura_tariffa
                 ^
QUERY:  SELECT (    select valore 
                from vettura_tariffa
                where new.targa=vettura.targa)
CONTEXT:  PL/pgSQL function "progettoBD".costout() line 14 at assignment
---------------------------
OK   
---------------------------
代码如下

create or replace function costout()
returns trigger AS
$$ 
DECLARE 
giorno integer;
gg1 integer;
gg2 integer;
tariffa numeric(2,0) ;
costo integer;
BEGIN
        gg1=extract (days from new.dataconsegna);
        gg2=extract (days from new.dataritiro);
        giorno=gg1-gg2;


        tariffa=(   select valore 
                from vettura join tariffa on vettura.tipotariffa=tariffa.tipo
                where new.targa=vettura.targa); 
     costo=tariffa * giorni;
     new.costoutilizzo=costo;
END;
$$ language plpgsql;
这是触发器的代码

create trigger costo_utilizzo
after insert on utilizzo
for each row 
execute procedure costout();
它似乎找不到表vettura,其他表也一样,如果我尝试简单的“select*from vettura”,效果很好。 我尝试从视图中交换视图,但问题仍然存在。 此错误出现在“utilizzo”的插入之后。 对不起,我的英语不好,先谢谢你。

再见,Atz34

生成的错误表明您正在调用一个函数,该函数引用了
vettura_tariffa
,而您发布的代码引用了
vettura JOIN tariffa
。可能是代码中的某个简单错误。但是,触发器和触发器函数还有一些问题

首先,当您修改
NEW
的任何字段时,应该在INSERT触发器之前调用
;在插入后的
触发器上,更改将不会保存在表中(您只能执行审计或更改其他表等副作用)

其次,
extract(datefrom…)。假设您的
datacosegna
dataritiro
date
列,您可以简单地减去它们,然后添加1:
NEW.dataritiro-NEW.dataconsegna+1
(因此当天返回不是免费的)

第三,始终从插入触发器返回新的

然后,您可以将所有语句折叠为:

CREATE OR REPLACE FUNCTION costout() RETURNS trigger AS $$ 
BEGIN
  SELECT valore * (NEW.dataritiro - NEW.dataconsegna + 1) INTO NEW.costoutilizzo
  FROM vettura
  JOIN tariffa ON vettura.tipotariffa = tariffa.tipo
  WHERE NEW.targa = vettura.targa;
  RETURN NEW;
END; $$ LANGUAGE plpgsql;

JAVA问题的解决方案

我们需要使用双引号和条,以便postgresql接受该命令


sql=“插入到\“模式\”表\”()值(?,,?)

我看到了
vettura
vettura\u tariffa
搜索路径
问题?该查询没有生成该错误。在您调用
vettura
的查询中,错误是由
vettura\u tariffa
引起的。要么是您查找的查询错误,要么是您有另一个触发器错误,它应该是错误的be“relation”vettura“not exist”,sorryHi!谢谢,但是即使有你的建议,它也不起作用,粘贴我忘记的代码che“return new”“it not work”也不足以帮助你。到底是什么错误?(查看postgresql日志文件了解更多详细信息)编辑你的问题以显示表定义。