保持列与Postgres中的另一列同步

时间:2016-12-01 00:53:20

标签: sql postgresql

我想知道是否可以让保持同步的列与同一个表中的另一列保持同步

让这张桌子成为一个例子:

+------+-----------+
| name | name_copy |
+------+-----------+
| John | John      |
+------+-----------+
| Mary | Mary      |
+------+-----------+

我想:

能够INSERT使用仅为name列提供值的name_copy - name列应自动获取我在UPDATE <中使用的值/ p>

name列在预先存在的行上name_copy列时,name_column应自动更新以匹配新的&amp;已更新<html> <head> <title>U.S Election 2016</title> </head> <body> <h1>U.S Election 2016 - Voting Page</h1> <form action="insert_vote.php" method="post"> <table border="0"> <tr> <td>Voter ID</td> <td><input type="text" name="VoterID" maxlength="13" size="13" /></td> </tr> <tr> <td>Candidate :</td> <td> <input type="radio" name="Candidate" value="Hillary Clinton" checked> Hillary Clinton<br> <input type="radio" name="Candidate" value="Donald Trump" checked> Donald Trump<br> <input type="radio" name="Candidate" value="Gary Johnson" checked> Gary Johnson<br> <input type="radio" name="Candidate" value="Jill Stein" checked> Jill Stein<br> <input type="radio" name="Candidate" value="None" checked> Undecided/None of the Above<br> </td> </tr> <tr> <td colspan="2"><input type="submit" value="Cast Vote" /></td> </tr> </table> </form> </body> </html>

一些解决方案

  • 我可以通过代码执行此操作,但这非常糟糕,因为我无法保证我的代码始终可以访问数据(如果有人通过数据库客户端更改数据会怎样?)

在Postgres中解决这个问题的安全可靠和简单方法是什么?

2 个答案:

答案 0 :(得分:2)

不要将name_copy放入表格中。一种方法是创建列并使用视图访问它:

create view v_table as
     select t.*, name as name_copy
     from t;

那就是说,我真的没有看到它的用途。

答案 1 :(得分:2)

创建trigger。简单的触发功能:

create or replace function trigger_on_example()
returns trigger language plpgsql as $$
begin
    new.name_copy := new.name;
    return new;
end
$$;

Test full example here