【发布时间】:2021-10-19 14:17:54
【问题描述】:
我有用户表和个人资料表。当在 user 表中创建记录时,它会自动在 profile 表中使用返回的 id 创建一条记录。 配置文件表是这样的:
create table app_public.profiles (
user_id int not null primary key references users,
first_name text check (char_length(first_name) < 50),
last_name text check (char_length(last_name) < 50),
display_name text
);
当用户更新配置文件表并输入 first_name 和 last_name 的值时,我想要一个触发器函数来连接这两列并使用结果来更新 display_name。
目前我将触发函数定义为
create function app_public.tg_user_display_name() returns trigger as $$
begin
NEW.display_name = CONCAT(profiles.first_name || ' ' || NEW.profiles.last_name);
return NEW;
end;
$$ language plpgsql volatile set search_path from current;
我也有触发器
create trigger _500_update_display_name
before update on app_public.profiles
for each row
execute procedure app_public.tg_user_display_name();
【问题讨论】:
-
1) 为什么要这样做?只需在查询表时执行此操作。 2) 如果你想这样做,那么它是
NEW.first_name和NEW.last_name。NEW仅将触发器所在的表的值保存为NEW.<column_name>。 -
如果答案解决了您的问题,请接受。接受答案有助于后来的提问者遇到同样的问题。此外,它会从未回答的队列中删除问题。如果没有一个足以解决您的问题,请发布剩下的内容。
-
我已经接受了下面的第二个答案
标签: sql postgresql triggers string-concatenation postgresql-triggers