我在psql中胡思乱想,在意识到它们的用法之前重命名了template0和template1。现在,当我试图重新创建template1时,我从psql和form命令行中获得了“拒绝复制数据库'template1'的权限”。
为了节省时间,我还需要了解template1相对于vis OS在/data/base中的读/写权限或对template1的授予权限等。
短暂性脑缺血发作
最佳答案
你必须告诉PostGreSQLtemplate1
是一个模板。如果你不这样做,如果你不是所有者,就不允许复制它:
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
我必须阅读
/src/backend/commands/dbcommands.c
(由Google找到)的源代码才能理解这一点。上面写着:/*
* Permission check: to copy a DB that's not marked datistemplate, you
* must be superuser or the owner thereof.
*/
if (!src_istemplate)
{
if (!pg_database_ownercheck(src_dboid, GetUserId()))
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("permission denied to copy database \"%s\"",
dbtemplate)));
}
我发现怎么做on a blog
my similar problem