我想知道是否可以让一列始终保持同步与同一个表中的另一列。
以这张表为例:
+------+-----------+
| name | name_copy |
+------+-----------+
| John | John |
+------+-----------+
| Mary | Mary |
+------+-----------+
我愿意:
能够INSERT
到这个表中,只为name
列提供一个值——name_copy
列应该自动取值我在 name
当 UPDATE
-ing 预先存在的行上的 name
列时,name_copy
应该自动更新以匹配新的和更新的 name_column
.
一些解决方案
- 我可以通过代码做到这一点,但那会非常糟糕,因为不能保证我的代码始终可以访问数据(如果有人通过数据库客户端更改数据怎么办?)
在 Postgres 中解决这个问题的安全、可靠且简单的方法是什么?
最佳答案
您可以创建一个 trigger .简单的触发函数:
create or replace function trigger_on_example()
returns trigger language plpgsql as $$
begin
new.name_copy := new.name;
return new;
end
$$;
在 Postgres 12+ 中有一个很好的替代形式 generated columns.
create table my_table(
id int,
name text,
name_copy text generated always as (name) stored);
请注意,不能直接写入生成的列。
在 db<>fiddle. 中测试这两种解决方案
关于sql - 保持列与 Postgres 中的另一列同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900861/