gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:32:28 25 4
gpt4 key购买 nike

当我尝试在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com