如何在同一行postrges中使用自动生成的主键

时间:2016-11-21 08:16:43

标签: postgresql

我正在尝试使用以下架构在表中创建一个insert语句

CREATE TABLE auth(
    id                  UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    role                VARCHAR(64)
);

我正在使用pgcrypto扩展来生成uuids。在此表中插入行时是否可以将id附加到角色字段?

我使用

插入此表
insert into auth (role) values ('admin');

我想将生成的id附加到管理员,以便该角色看起来像admin_12234-3453-3453-345-34534。

2 个答案:

答案 0 :(得分:1)

您需要插入触发器来执行此操作:

CREATE FUNCTION admin_uuid() RETURNS trigger AS $$
BEGIN
    NEW.role := NEW.role || NEW.id::text;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql STABLE;

CREATE TRIGGER set_admin_uuid
BEFORE INSERT ON auth
FOR EACH ROW EXECUTE PROCEDURE admin_uuid();

答案 1 :(得分:0)

我认为没有直接的方法来实现这一目标。但是postgres允许在表和视图上定义规则(参见https://www.postgresql.org/docs/9.2/static/sql-createrule.html)。您可以为插入创建新规则,根据需要创建idrole