Postgres-将自定义安全性分配给表

时间:2020-08-25 15:13:30

标签: postgresql

我创建了一个test_seq,我想将安全性分配给一个表。

CREATE SEQUENCE test_seq;

和实现:

 CREATE SEQUENCE drop_permission_seq;

CREATE OR REPLACE FUNCTION before_insert_drop_permission() RETURNS trigger AS $$
DECLARE
  _id  TEXT;
BEGIN
  
  PERFORM 
  CASE
        WHEN length(nextval('drop_permission_seq')::TEXT) < 2 THEN _id = 'DP-000000'||(nextval('drop_permission_seq')::TEXT)
        WHEN length(nextval('drop_permission_seq')::TEXT) < 3 THEN _id = 'DP-00000'||(nextval('drop_permission_seq')::TEXT)
        WHEN length(nextval('drop_permission_seq')::TEXT) < 4 THEN _id = 'DP-0000'||(nextval('drop_permission_seq')::TEXT)
        WHEN length(nextval('drop_permission_seq')::TEXT) < 5 THEN _id = 'DP-000'||(nextval('drop_permission_seq')::TEXT)
        WHEN length(nextval('drop_permission_seq')::TEXT) < 6 THEN _id = 'DP-00'||(nextval('drop_permission_seq')::TEXT)
        WHEN length(nextval('drop_permission_seq')::TEXT) < 7 THEN _id = 'DP-0'||(nextval('drop_permission_seq')::TEXT)
        ELSE _id = 'DP-'||(nextval('drop_permission_seq')::TEXT)
    END ;

  -- Now assign the order id and continue with the insert
  NEW.drop_permission_name = _id;
  RETURN NEW;
END; $$ LANGUAGE plpgsql;

CREATE TRIGGER assign_drop_permission_key
  BEFORE INSERT ON public.drop_permission
  FOR EACH ROW EXECUTE PROCEDURE before_insert_drop_permission();

但是每次我尝试插入时,都会出现错误:

错误:“ drop_permission_name”列中的空值违反了非空 约束

为什么不插入主键?我该怎么解决?

2 个答案:

答案 0 :(得分:0)

您可以使用序列下一个值作为id字段的默认值:

ALTER TABLE users ALTER COLUMN id SET DEFAULT nextval('test_seq');

答案 1 :(得分:0)

你想要

ALTER TABLE ... ALTER col
   SET DEFAULT to_char(nextval('drop_permission_seq'), 'DP-0000000');