postgresql“createdb”和“CREATE DATABASE”产生一个非空数据库。什么叉子?

时间:2014-08-07 16:18:37

标签: postgresql

首先,如果这个问题变得非常明显,我很抱歉,我并不是那种超越基本知识的精湛技术。我使用postgresql作为我工作的很多django项目的数据库后端,这对我来说总是很好用。最近,我在一台新机器上设置了postgresql,同时一位同事尝试在该机器上设置一个新项目。不幸的是,回到bash历史来弄清楚他做了什么已经为时已晚,而且他已经有一段时间无法问他这个问题了。我现在遇到的问题是......

我只需使用dropdb / createdb命令定期重置postgres数据库。我注意到每当我运行dropdb命令时,数据库都会消失,但是当我接下来运行createdb命令时,生成的数据库不为空。它包含表,这些表确实包含数据(看起来是来自其他项目的虚拟数据)。我意识到我有点像postgres noob,但这在某种程度上与postgres中的模板功能有关吗?我没有在命令行中指定类似的内容,如果我从psql控制台删除/创建,我会看到完全相同的结果。

顺便说一句,我仍然可以通过删除和重新创建" public"来擦除数据库。数据库中的模式。我很乐意添加任何必要的信息来帮助解决这个问题,但说实话,我还不知道在这一点上要寻找什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

docs template0总结本质上是一个干净的原始系统数据库,而template1用作使用createdb命令创建的任何新数据库的蓝图或从psql提示创建数据库(没有有效的区别) )。

你可能有一些潜伏在template1中的表,这就是为什么他们不断重新出现在createdb上。您可以通过删除template1并从template0重新创建它来解决此问题。

createdb -T template0 template1 

template1数据库非常有用。我经常使用Postgis,所以我在template1中安装了与之相关的所有函数和表,因此我创建的任何新数据库都会立即在空间上启用。

修改即可。正如文档中所述,但值得强调的是,要删除tempate1,您需要设置pg_database.datistemplate = false。