我已经设置了特殊权限的分区表:
CREATE TABLE public.paritioned_table (
_time int8 NULL,
...
) PARTITION BY RANGE (_time);
-- 权限
GRANT ALL ON TABLE public.paritioned_table TO someuser;
我有一个创建分区的触发器:
_partition := 'paritioned_table_' || to_char(to_timestamp(_time),'YYYY_MM');
IF NOT EXISTS(SELECT relname FROM pg_class WHERE relname = _partition) THEN
RAISE NOTICE 'A partition has been created %', _partition;
select extract(epoch FROM date_trunc('month', to_timestamp(_time))) into _from;
select extract(epoch FROM date_trunc('month', to_timestamp(_time)) + INTERVAL '1 MONTH') into _to;
execute 'CREATE TABLE ' || _partition || ' PARTITION OF paritioned_table FOR VALUES FROM (' || _from || ') TO (' || _to || ')';
END IF;
问题是新创建的分区没有继承父级的权限。 所以我的问题 - 创建具有权限继承的分区的最佳实践是什么
最佳答案
使用每次INSERT
运行的触发器来检查是否需要创建分区会降低一些性能。另外,如果有人输入 -100000000000 的 _time
,您是否希望创建一个分区?
但是对于你的问题:分区是自己的表,没有继承权限或存储参数的规定。您有两个选择:
向触发器添加
GRANT
语句。发出
ALTER DEFAULT PRIVILEGE
语句,为所有新创建的表设置默认权限(可能仅限于架构)。
关于postgresql - postgresql中创建表分区的权限继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59661207/