Nik*_*des 2 sql postgresql triggers
我想知道是否可以让一列始终与同一个表中的另一列保持同步。
以此表为例:
+------+-----------+
| name | name_copy |
+------+-----------+
| John | John |
+------+-----------+
| Mary | Mary |
+------+-----------+
Run Code Online (Sandbox Code Playgroud)
我想:
能够INSERT进入此表,仅使用为列提供值name- 该name_copy列应自动采用我在其中使用的值name
当在预先存在的行上UPDATE添加列时,应该自动更新以匹配新的和更新的。namename_copyname_column
在 Postgres 中解决这个问题的安全可靠且简单的方法是什么?
您可以创建一个触发器。简单的触发功能:
create or replace function trigger_on_example()
returns trigger language plpgsql as $$
begin
new.name_copy := new.name;
return new;
end
$$;
Run Code Online (Sandbox Code Playgroud)
在Postgres 12+中,有一个很好的替代方案,即生成列的形式。
create table my_table(
id int,
name text,
name_copy text generated always as (name) stored);
Run Code Online (Sandbox Code Playgroud)
请注意,无法直接写入生成的列。
在 db<>fiddle 中测试这两个解决方案。