Postgresql:创建 View 并使用默认表空间?

标签 postgresql view tablespace

当我尝试在 PostgreSQL 13 中创建 View 时,我收到一条错误消息:“表空间 tbs_dft 的权限被拒绝”。如您所见,我已经更改了系统默认表空间。通过在表空间“tbs_dft”上授予创建权限,这个问题很容易解决。但我的问题是:为什么在创建包含简单 select 语句的 View 时需要访问“默认表空间”?虽然这不是一个实际问题,但我正在尝试学习来自 Oracle 的 Postgresql,因此我不确定它是什么,我不了解 View 创建在 Postgresql 中的工作方式。

感谢收到的任何信息。

最佳答案

原因是每当创建一个relation(在 src/backend/commands/tablecmds.cDefineRelation ).关系是存储在 pg_class 中的任何内容:表、索引、序列、复合类型、 View 或物化 View 。

现在 View 或复合类型没有数据文件,所以在这种情况下可以跳过检查。如果这对你很重要,请联系 pgsql-hackers 邮件列表上的开发人员。我认为这可以改进。

这里是有问题的代码:

    /* Check permissions except when using database's default */
    if (OidIsValid(tablespaceId) && tablespaceId != MyDatabaseTableSpace)
    {
        AclResult   aclresult;

        aclresult = pg_tablespace_aclcheck(tablespaceId, GetUserId(),
                                           ACL_CREATE);
        if (aclresult != ACLCHECK_OK)
            aclcheck_error(aclresult, OBJECT_TABLESPACE,
                           get_tablespace_name(tablespaceId));
    }

关于Postgresql:创建 View 并使用默认表空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71231494/

相关文章:

android - Linearlayout 中的背景图像

sql - 在 Oracle 11g 中如何将分区表从一个表空间移动到另一个表空间?

oracle - 索引有不同的表空间是否有任何逻辑原因?

sql - 将 UNNEST 与 JOIN 结合使用

sql - 集合运算符的 PostgreSQL 实现

android - 在圆圈下方绘制文字

mysql - 记录未出现在 View 中,但出现在 View 查询结果中

Oracle 表空间 maxsize "unlimited"并不是真正无限

sql - postgresql 将行更新为固定数字

postgresql - 编写在 PostgreSQL 中插入 varbinary 值的查询