Postgres 中的不变性

Immutability in Postgres

我想创建 Immutable Postgres 数据库,其中用户只能 insert/select (write/read) 数据,但不能 update/delete (change/delete ) 数据。

我知道有 FOR UPDATE 锁,但不知道如何使用它。

举例来说,我有下面的 table,我怎样才能使它成为 immutable(或者,如果我理解正确,我怎样才能使用 FOR UPDATE 永久锁定)

CREATE TABLE account(
 user_id serial PRIMARY KEY,
 username VARCHAR (50) UNIQUE NOT NULL,
 password VARCHAR (50) NOT NULL,
 email VARCHAR (355) UNIQUE NOT NULL,
 created_on TIMESTAMP NOT NULL,
 last_login TIMESTAMP
);

解决方案是只给访问数据库的用户对涉及的表的INSERTSELECT权限。

锁不是拒绝某人访问的工具,而是防止同时发生冲突数据修改的短期屏障。