Даны таблицы:
CREATE TABLE public.readership(
Idreader VARCHAR (255),
firstName VARCHAR ( 55 ) ,
lastName VARCHAR ( 55 ) ,
email VARCHAR ( 100 ) ,
address VARCHAR ( 100 ),
city VARCHAR ( 100 ) ,
state VARCHAR ( 100 ),
zipcode VARCHAR ( 100 ) ,
callNumber VARCHAR (100 ) ,
PRIMARY KEY (Idreader)
);
CREATE TABLE public.collection(
ItemBarcode VARCHAR (255),
title VARCHAR ( 255 ) ,
author VARCHAR ( 255 ) ,
ISBN VARCHAR ( 255 ) ,
publicationYear VARCHAR ( 255 ) ,
publisher VARCHAR ( 255 ) ,
itemCollection VARCHAR ( 255 ) ,
checkinDate VARCHAR (255),
PRIMARY KEY (ItemBarcode)
);
CREATE TABLE public.fund (
bibNum VARCHAR (255),
itemCount VARCHAR (255),
floatingItem BOOLEAN,
ItemBarcode VARCHAR (255),
PRIMARY KEY (bibNum),
FOREIGN KEY(ItemBarcode) REFERENCES collection(ItemBarcode)
);
CREATE TABLE public.orders(
IdOrders VARCHAR (255) ,
checkoutDateTime VARCHAR (255) ,
itemBarcode VARCHAR (255),
bibNum VARCHAR (255),
idReader VARCHAR (255),
PRIMARY KEY (IdOrders),
FOREIGN KEY(idReader) REFERENCES readership(idReader),
FOREIGN KEY(bibNum) REFERENCES fund(bibNum)
Я пытаюсь создать функцию и триггер, который будет обновлять атрибут timeorder с текущей датой, когда атрибут floatingItem обновляется. Функция, с которой я работаю, работает с одной проблемой. Он обновляет все записи, а не те, которые были обновлены. Проблема: при обновлении данных в floatingItem timeorder остается неизменным
ALTER TABLE public.orders ADD COLUMN timeorder timestamp without time zone;
CREATE FUNCTION web() RETURNS trigger AS
$$
BEGIN IF new.floatingItem = FALSE
THEN
UPDATE public.orders SET timeorder = current_timestamp WHERE
new.bubNum=orders.bibNum;
END IF;
RETURN new;
END;
$$
LANGUAGE plpgsql VOLATILE;
CREATE TRIGGER IF NOT EXISTS mytrigger AFTER UPDATE ON public.fund FOR EACH ROW EXECUTE PROCEDURE mytrigger ();
А как бы это сделали вы?