我在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

10-04 23:01