initdb / usr / local / var / [db]和createdb [db]有什么区别

Rob*_*uch 4 postgresql

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

  • createdb postgres
  • CREATE DATABASE postgres

两者都在我的数据库列表中建立了一个数据库。但是,当我尝试创建另一个数据库时initdb /usr/local/var/[someDbName],它没有出现在我的数据库列表中。那么,initdb和createdb有什么区别?

a_h*_*ame 7

initdb不是用来创建一个“新的数据库”。

如手册中所述,您需要它来创建“集群”或“数据目录”,然后存储使用创建的数据库create database

引用手册:

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

[...]

用文件系统的术语来说,数据库集群是一个目录,所有数据都将存储在该目录下。我们称其为数据目录或数据区域

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

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

  • 有一个隐含的层次结构:主机->集群[]->数据库[]->架构[]->表[]->列[];所以你需要一个主机来创建一个集群(废话!),并且你需要一个集群来创建一个数据库等等。[哎呀,这是为OP准备的] (4认同)
  • 是的,没有。需要“ initdb”来“初始化”数据库的物理存储。将其视为安装过程的一部分,而不是“日常工作”的一部分。任何说“ initdb”创建“数据库”的“方法”都是错误的 (2认同)