我有两个表,一个总线和另一个bus_tmp,在其中我需要更新或插入,我需要在总线表上设置一个触发器。两个表都有相同的字符。我对postgresql很陌生。:(如果是的话,我如何创建触发器?执行更新总线没有结果。)
更新表总线
UPDATE bus SET (patio_antes, patio_antes) = (SELECT patio_antes, patio_actual FROM bus_tmp
WHERE bus_tmp.interno = bus.interno)Error = ERROR:多个赋值给同一列"patio_antes“Estado SQL: 42601


发布于 2020-09-09 05:02:11
对于您的问题,我理解的是,您需要通过UPSERT上的触发器在bus表中使用bus_temp。因此,您应该在表bus_temp的bus_temp事件上编写一个触发器,如下所示:
触发函数
create or replace function bus_update() returns trigger as $$
begin
insert into bus(interno, modelo, tipo, patente, anio, chasis, plazas, carroceria, patio_antes, patio_actual)
values(new.interno, new.modelo, new.tipo, new.patente, new.anio, new.chasis, new.plazas, new.carroceria, new.patio_antes, new.patio_actual)
on conflict (interno)
do update set
modelo=excluded.modelo,
tipo=excluded.tipo,
patente=excluded.patente,
anio=excluded.anio,
chasis=excluded.chasis,
plazas=excluded.plazas,
carroceria=excluded.carroceria,
patio_antes=excluded.patio_antes,
patio_actual=excluded.patio_actual;
return new;
end;
$$
language plpgsql;触发器
CREATE TRIGGER
trg_bus_update
After INSERT OR UPDATE ON
bus_temp FOR EACH ROW EXECUTE PROCEDURE bus_update(); 上面会做你在问题中提到的事情。
发布于 2020-09-08 23:39:59
我想你想
UPDATE bus SET (patio_antes, patio_actual) = (SELECT patio_antes, patio_actual FROM bus_tmp
WHERE bus_tmp.interno = bus.interno);当前的查询试图一次将patio_antes设置为两个不同的列,因为它包含相同的列名(、patio_antes、patio_antes)。
但是,如果给定的bus_tmp.interno没有匹配的bus.interno,那么两个bus.patio_antes and.patio_actual都将被设置为NULL。
https://stackoverflow.com/questions/63798296
复制相似问题