template0和template1数据库意外丢失

时间:2015-01-16 20:51:59

标签: postgresql

我不知道创建空数据库需要template0template1个数据库模板。我删除它们是为了清理postgres。现在我无法创建任何新数据库。给我这个错误:

ERROR:  template database "template1" does not exist

我可以做些什么来让事情再次发生。我会非常感谢任何帮助。

4 个答案:

答案 0 :(得分:17)

幸运的是我保留了postgres个数据库,因为postgres用户需要登录psql。因此,创建了一个template0template1数据库:

create database template0 TEMPLATE postgres;

和template1相同。然后执行:

update pg_database set datistemplate=true  where datname='template0';

两个数据库都阻止我再次意外删除这些模板。

现在一切正常:)

答案 1 :(得分:0)

在我的CentOS 7机器上,我不太幸运,仍然可以连接数据库。但是:

su postgres -c "initdb /var/lib/pgsql/data"

(作为根用户)创建了要使用的template0和template 1。

答案 2 :(得分:0)

在我的debian机器上,我将一些集群升级到了版本11。 目标集群上的template [01]数据库已删除,使我使用较早版本的数据库。

我以root身份使用pg_createcluster创建了一个新集群。

作为用户postgres:

使用pg_dumpall(带有--clean标志)转储新集群的数据库。

删除新群集。

使用psql将结果源导入群集中。

我将删除放置角色postgres并创建该角色。

最好的问候, 亚历克斯

答案 3 :(得分:0)

对于Postgres 12.3,以下对我有用。

我删除了template1,但不知道它是什么。我能够从template0创建它。您也可以从postgres创建它。

createdb -T template0 template1
createdb -T postgres template1

这在文档中建议-

除了名称template1是CREATE DATABASE的默认源数据库名称外,

template1和template0没有任何特殊状态。例如,可以删除template1并从template0重新创建它,而不会产生任何不良影响。

https://www.postgresql.org/docs/current/manage-ag-templatedbs.html