Tonardo Wang 2022-03-13 22:45 采纳率: 0%
浏览 271

错误: 对表空间 pg_default 权限不够

问题遇到的现象和发生背景

背景:想要搞清楚在pg_default表空间上创建database,是否需要先给role赋予pg_default的CREATE权限?也就是:

GRANT CREATE ON TABLESPACE pg_default to role_name;

发现问题如下:

  1. 不给role赋予pg_default的CREATE的权限, 执行CREATE DATABASE ...

如果不指定TABLESPACE pg_default, 居然可以成功的 -- 怀疑这是bug!
如果指定TABLESPACE pg_default, 就会错误: 对表空间 pg_default 权限不够.

  1. 给role赋予pg_default的CREATE的权限,执行CREATE DATABASE ...
    则指定TABLESPACE pg_default也会成功。
问题相关代码,请勿粘贴截图

场景1. role_createdb 未被赋予pg_default的CREATE权限

测试1,不指定tablespace pg_default

  => CREATE DATABASE testdb7;

结果:成功!对这个结果怀疑是bug

测试2, 指定tablespace pg_default

  => CREATE DATABASE testdb8 tablespace pg_default;

结果:错误: 对表空间 pg_default 权限不够

场景2. role_createdb被赋予pg_default的CREATE权限

  => GRANT CREATE ON TABLESPACE pg_default to role_createdb;

测试1,不指定tablespace pg_default

   => CREATE DATABASE testdb7;

结果:成功!

测试2, 指定tablespace pg_default

=> CREATE DATABASE testdb8 tablespace pg_default;

结果:成功!

=> select version();
version


PostgreSQL 13.4, compiled by Visual C++ build 1914, 64-bit
(1 row)

我的解答思路和尝试过的方法
=>  select datname,dattablespace from pg_database where datname='testdb7';

datname | dattablespace

testdb7 | 1663
(1 row)

=> select * from pg_tablespace;

oid | spcname | spcowner | spcacl | spcoptions

1664 | pg_global | 10 | |
1663 | pg_default | 10 | {postgres=C/postgres} |
(2 rows)

结果说明,即使不指定pg_tablespace, testdb7的表空间也是pg_tablespace.

我想要达到的结果

要想在pg_tablespace上创建database,需要先给role赋予pg_default 的CREATE 权限.如下:

GRANT CREATE ON TABLESPACE pg_default to role_name;

如果不给role赋予pg_default的CREATE权限, 应该不能在pg_default上创建database.

  • 写回答

1条回答 默认 最新

  • yang_z_1 2022-03-19 22:08
    关注

    img


    CREATE DATABASE testdb8 tablespace pg_default; 这个没有问题,我怀疑是你现在用的角色没有权限访问pg_defaul这个表空间。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月13日
  • 专家修改了标签 3月13日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误