You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PostgreSQL中initdb与createdb命令的区别是什么?

PostgreSQL 创建数据库的两种方式:一次搞懂!

嘿,刚接触PostgreSQL的时候我也对这几个操作懵圈过,给你拆解清楚它们的分工和区别:

先搞明白:initdb 不是创建单个数据库!

你第一次运行的 initdb /usr/local/var/postgres初始化整个PostgreSQL数据库集群的命令,这是安装完成后的一次性操作:

  • 它会创建一个存储所有数据库、系统表、配置文件的目录(就是你指定的/usr/local/var/postgres
  • 自动生成默认的postgres数据库(这就是你在列表里看到的那个),还有模板库template0template1
  • 简单说,initdb是给PostgreSQL搭好整个“服务器框架”,没有这一步,连数据库都没法创建

两种创建单个数据库的方式

当集群初始化完成后,你就可以用下面两种方式创建自己的数据库了:

1. 命令行工具:createdb

这是PostgreSQL提供的命令行脚本,本质是对SQL命令的封装,不用进入psql交互环境就能直接用:

  • 基础用法:createdb my_new_db,直接创建名为my_new_db的数据库
  • 带参数的用法:比如指定创建数据库的用户,createdb -U my_username my_new_db;或者指定编码,createdb -E UTF8 my_new_db
  • 如果你尝试用它创建postgres数据库,会报错,因为这个库已经被initdb自动创建了

2. SQL命令:CREATE DATABASE

这个需要先进入psql交互环境(比如先执行psql postgres连接到默认库),然后执行SQL语句:

  • 基础用法:CREATE DATABASE my_new_db;(注意结尾的分号)
  • 更灵活的配置:比如设置编码、表空间,CREATE DATABASE my_new_db ENCODING 'UTF8' TABLESPACE my_custom_tablespace;
  • createdb一样,重复创建postgres也会提示“数据库已存在”

总结一下

  • initdb:搭全局框架,只跑一次
  • createdb:命令行快捷方式,适合快速建库
  • CREATE DATABASE:SQL原生命令,适合需要精细配置的场景

内容的提问来源于stack exchange,提问作者Robin Wieruch

火山引擎 最新活动