我在postgres表中有权限表
CREATE TABLE public.permissions
(
permission_id integer NOT NULL,
crud_signature text COLLATE pg_catalog."default" NOT NULL,
object_id uuid NOT NULL,
object_type text COLLATE pg_catalog."default" NOT NULL,
include_subcategories boolean NOT NULL,
CONSTRAINT permissions_pkey PRIMARY KEY (permission_id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.permissions
OWNER to postgres;
并具有ROLES表。每个角色都有多个权限。
CREATE TABLE public.roles
(
role_id integer NOT NULL,
role_name text COLLATE pg_catalog."default" NOT NULL,
role_description text COLLATE pg_catalog."default",
permissions integer[],
CONSTRAINT roles_pkey PRIMARY KEY (role_id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.roles 拥有者到postgres;
当我尝试创建类型为permissions
的{{1}}之类的外键列时,Posgres给我一个错误,认为eseese字段具有不可分割的类型-integer[]
和integer
>
我该怎么办?
答案 0 :(得分:2)
我实际上建议在这里使用数组不。而是使用 junction 表来表示每个角色权限关系,如下所示:
CREATE TABLE roles_permissions (
role_id integer NOT NULL,
permission_id integer NOT NULL,
CONSTRAINT rp_pkey PRIMARY KEY (role_id, permission_id)
);
然后通过删除权限数组来修改当前的roles
表。您当前的方法使用非规范化数据,因为您正试图在数组中为每个单独的角色存储一组权限。