我不知道创建空数据库需要template0
和template1
个数据库模板。我删除它们是为了清理postgres。现在我无法创建任何新数据库。给我这个错误:
ERROR: template database "template1" does not exist
我可以做些什么来让事情再次发生。我会非常感谢任何帮助。
答案 0 :(得分:17)
幸运的是我保留了postgres
个数据库,因为postgres
用户需要登录psql
。因此,创建了一个template0
和template1
数据库:
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