initdb / usr / local / var / [db]和createdb [db]

时间:2018-05-07 08:38:17

标签: postgresql

我开始使用PostgreSQL,我对创建数据库的两种方法感到困惑。当我第一次安装它时,说明我必须使用initdb /usr/local/var/postgres创建一个默认数据库。当我查找我的数据库时,我可以看到我有一个名为postgres的数据库。现在我可以使用另外两个命令创建数据库,而前者是命令行脚本,后者是SQL命令。对于" postgres"称为数据库,它将是:

  • createdb postgres
  • CREATE DATABASE postgres

两者都在我的数据库列表中设置数据库。当我尝试使用initdb /usr/local/var/[someDbName]创建另一个数据库时,它不会出现在我的数据库列表中。那么initdb和createdb之间的区别呢?

1 个答案:

答案 0 :(得分:5)

initdb 用于创建"新数据库"。

As documented in the manual你需要它来创建一个"集群"或"数据目录"然后存储使用create database创建的数据库。

手册中的引用:

  

在执行任何操作之前,必须初始化磁盘上的数据库存储区域。我们称之为数据库集群。 (SQL标准使用术语目录集群。)数据库集群是由正在运行的数据库服务器的单个实例管理的数据库集合

     

[...]

     

在文件系统术语中,数据库集群是一个目录,在该目录下将存储所有数据。我们称之为数据目录或数据区

简而言之:initdb在硬盘上创建必要的目录布局,以便能够创建和管理数据库。

它是Postgres服务器的安装过程的必要部分。