我在psql中搞砸了,并在实现它们之前重命名了template0和template1。现在,当我尝试重新创建template1时,我从psql内部和form命令行中获得了“权限被拒绝复制数据库'template1'”。
为了节省时间,我还需要了解template1与/ data / base中的操作系统读/写权限或者在template1等上授予权限。
TIA
答案 0 :(得分:6)
你必须告诉PostGreSQL template1
是一个模板。如果您不这样做,如果您不是所有者,则不允许复制它:
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
答案 1 :(得分:2)
您是如何尝试“重新创建template1”的?
最简单的方法是删除“template1”架构并从“template0”架构重新创建它。那就是 - 如果“template0”仍在那里。
更多 - here。
答案 2 :(得分:1)
您重命名了两个数据库?也许这会做你需要的:
UPDATE pg_database SET datistemplate = TRUE, datname = 'template0' WHERE datname = 'current_template0_name';
UPDATE pg_database SET datistemplate = TRUE, datname = 'template1' WHERE datname = 'current_template1_name';