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