我已对分区表设置了特殊权限:
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
来检查是否需要创建分区会降低性能。另外,如果有人输入_time
-100000000000,是否要创建分区?
但要问的是:分区是它们自己的表,并且没有关于继承权限或存储参数的规定。您有两种选择:
GRANT
在触发器中添加一条语句。
发出一条ALTER DEFAULT PRIVILEGE
语句,为所有新创建的表设置默认特权(可能仅限于架构)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句