当表获得新记录时,自动在另一条记录中创建一条记录



我有两个表。当一条记录添加到service表中时,我想在付款记录中自动创建一条状态为false的记录。我希望付款看起来像这样,例如,如果服务已经添加

它应该自动创建一个付款记录,如下所示:

id: autoincrement, fk_service 1, price null, payment_date null, status false

在我的网络应用程序中,我只会更新值。

原始表格:

服务

id BIGSERIAL PK,
start_date date not null,
end_date date null,
status VARCHAR(20)

支付

id BIGSERIAL PK,
fk_service BIGSERIAL,
price DECIMAL,
payment_date date,
status BOOLEAN not null,
FOREIGN KEY(fk_service) references service(id)

可以有人建议,我该如何做到这一点?

我试着写一个触发

CREATE FUNCTION insert_payment() RETURNS TRIGGER
AS $insert_payment$
BEGIN
IF NEW service THEN
insert into payment(fk_service, status) values (service.id, false) 
END IF;
END;

我正在获取syntax error at or near create line 5 as $BODY$CREATE FUNCTION insert_payment() RETURNS TRIGGER^

您必须"附上";将函数转换为at触发器,它将侦听给定表上的事件,例如AFTER INSERT触发器

功能

CREATE OR REPLACE FUNCTION insert_payment() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO payment(fk_service, status) values (NEW.id, false);
RETURN NEW;
END;$$ LANGUAGE plpgsql;

service表上的触发器

CREATE OR REPLACE TRIGGER on_insert_service AFTER INSERT ON service
FOR EACH ROW EXECUTE PROCEDURE insert_payment();

演示:db<>fiddle

最新更新