database - 如何更改 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”。
解决方案
模式的默认用户由Postgres 在创建新数据库时复制public
的模板数据库(称为 )设置。template1
如果要更改新创建数据库的默认值,则需要修改template1
. 例如,您可以DROP SCHEMA public
从template1
. 现在您不需要通过删除来开始迁移,public
因为它不存在。当然,要做到这一点,您需要(至少暂时)使用有权编辑的用户登录template1
。
有关更多信息,请阅读 Postgres 邮件列表中的此线程,https://www.postgresql.org/message-id/CAFjNrYu8GqD%3D17DimG9QtWoV1hPviqHxaZp2umWAPkpUOFAGYg%40mail.gmail.com。