postgresql - postgresql中创建表分区的权限继承

标签 postgresql permissions partitioning

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

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/

相关文章:

postgresql - 返回包含列的表

amazon-web-services - 使用分区查询 Amazon Athena

sql - 带有连接表的 PostgreSQL 分区 - 查询计划中未使用分区约束

postgresql - 选择不同的。最适合减少等待时间的技术

postgresql - 如何使用 epgsql 驱动程序连接到 Erlang 中的 PostgreSQL?

ruby-on-rails-3 - 如何让 Maxmind 的 Geoip 数据库与 Postgres + Heroku 一起工作

sql - 用于对值 0-9、10.20 进行分组的多个 case 语句

c# - 在 UWP 应用程序中访问网络摄像头被拒绝

Magento:您的 Web 服务器配置不正确

php - 403 禁止尝试执行 php 脚本