如何更改Postgresql数据库上公共架构的默认所有者?

时间:2019-01-21 10:39:43

标签: database postgresql schema database-schema

当我用用户创建数据库时,公共架构是用“ 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错误:您必须是公共架构的所有者。

image

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

image

但是默认情况下,公共架构的所有者是“ postgres”!

而且我无法更改。

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

1 个答案:

答案 0 :(得分:0)

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

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