postgresql "createdb"和 "CREATE DATABASE"产生一个非空数据库。 fork 是什么?

标签 postgresql

首先,如果这个问题变得非常明显,我深表歉意,我不是那种超越基础知识的 postgres 专家。我使用 postgresql 作为我正在处理的很多 django 项目的数据库后端,这对我来说总是很好。最近,我在一台新机器上设置了 postgresql,有一次一位同事试图在那台机器上设置一个新项目。不幸的是,现在回到 bash 历史来弄清楚他做了什么已经太晚了,而且他将有一段时间不能问他这件事。我现在遇到的问题是...

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

顺便说一句,我仍然可以通过删除并重新创建数据库中的“公共(public)”模式来删除数据库。我很乐意添加任何必要的信息来帮助解决这个问题,但老实说,我现在不知道要寻找什么。任何帮助将不胜感激。

最佳答案

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

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

createdb -T template0 template1 

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

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

关于postgresql "createdb"和 "CREATE DATABASE"产生一个非空数据库。 fork 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25187456/

相关文章:

sql - 开源数据库中行数的上限?

postgresql - 如何从地理点只选择纬度或经度

ruby-on-rails - Heroku rake 命令

regex - Postgres 正则表达式 : Behavior of\s and\S and character class seems wrong

postgresql - cloudfoundry 上的 grails 应用程序,如果定义了多数据源

postgresql - 我应该使用 Firebase UID 作为数据库中用户表的主键吗?

java - PostgreSQL 9.0 JDBC 驱动程序是否适用于 64 位 java?

node.js - child 家务模式的数据库设计

python - 修改多边形,使它们不重叠并且面积保持不变

postgresql - JBoss 日志 Postgres 驱动是 "non-JDBC-compliant"