首页 > 解决方案 > 如何更改 postgresql 数据库上公共架构的默认所有者?

问题描述

当我使用我的用户创建数据库时,公共架构是使用“postgres”用户创建的。我可以在此架构中创建和删除表,但不能删除架构或更改所有者。

我正在为一个 php 项目安装 Phinx 迁移。这是一个成熟的项目,有很多表。对于 up() 方法的第一次迁移,我加载了一个带有数据库架构的 sql 文件,在 down() 方法上,我将删除架构(表、触发器、过程......)

class FirstMigration extends AbstractMigration
{
    public function up()
    {
        $schema= file_get_contents('./database/migrations/schemaDB.sql');
        $this->execute($schema);
    }

    public function down()
    {
        $this->execute("DROP SCHEMA public CASCADE");
        $this->execute("CREATE SCHEMA public");
    }
}

当我回滚时,我有一个错误:

权限不足:7 错误:您必须是公共架构的所有者。

图片

当我创建数据库时,我选择用户“citest”

图片

但是公共模式的默认所有者是“postgres”!

我无法改变它。

我的用户是数据库的所有者,但不是公共模式的所有者,即用户“postgres”。

标签: databasepostgresqlschemadatabase-schema

解决方案


模式的默认用户由Postgres 在创建新数据库时复制public的模板数据库(称为 )设置。template1如果要更改新创建数据库的默认值,则需要修改template1. 例如,您可以DROP SCHEMA publictemplate1. 现在您不需要通过删除来开始迁移,public因为它不存在。当然,要做到这一点,您需要(至少暂时)使用有权编辑的用户登录template1

有关更多信息,请阅读 Postgres 邮件列表中的此线程,https://www.postgresql.org/message-id/CAFjNrYu8GqD%3D17DimG9QtWoV1hPviqHxaZp2umWAPkpUOFAGYg%40mail.gmail.com


推荐阅读