在PostgreSQL中创建表分区的权限继承

斯拉瓦·罗热涅夫(Slava Rozhnev)

我已对分区表设置了特殊权限:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章