macOS使用homebrew安装PostgreSQL

最近有项目用到PostgreSQL,本地macOS开发环境需要用来开发测试,算是新接触,部分情况跟以往熟悉的MySQL不太相同,特地将部分部分需要用到的命令做个记录。

搜索及安装

如标题所示,系统是macOS,没有选择官网下载安装包而是利用Homebrew进行安装,Homebrew本身的设置及安装不谈,只说PostgreSQL相关。

PostgreSQL版本查看:

zoco@192:~
➤ brew search postgresql
==> Formulae
postgresql       postgresql@11    postgresql@13    postgresql@9.5   qt-postgresql
postgresql@10    postgresql@12    postgresql@9.4   postgresql@9.6   postgrest

==> Casks
navicat-for-postgresql

可以看出,目前(2022年10月)Homebrew是支持从9.4开始到最新的14版本,我是选择最新的14版本,如果有版本需求的,安装的时候可以带上版本号进行安装,命令如下:

brew install postgresql
# 或者直接带上版本号安装
brew install postgresql@14

PostgreSQL初始化操作

macOS系统上Homebrew安装PostgreSQL默认会进行初始化操作,如果是别的系统或者更新之后:

initdb --locale=C -E UTF-8 /usr/local/var/postgres

如果测试环境出错导致服务无法启动,可以通过如下命令重新初始化PostgreSQL,操作之前记得先备份对应的文件夹:

cp -a /usr/local/var/postgres /usr/local/var/postgres-bak
rm -rf /usr/local/var/postgres
initdb --locale=C -E UTF-8 /usr/local/var/postgres

启动及停止

之所以采用Homebrew安装PostgreSQL而不是使用官网安装包下载安装,原因之一就是可以借助Homebrew进行PostgreSQL的进程控制,相关命令:

brew service start postgresql@14
brew service restart postgresql@14
brew service stop postgresql@14

上述三行命令分别是启动、重启及停止PostgreSQL服务,最后尾的14是版本号,需要跟上述安装的版本号一致。

登录PostgreSQL

和MySQL不同,初始安装PostgreSQL之后,默认是使用postgre用户登录,且不需要密码,直接就能登录,命令如下:

psql postgres

如果需要创建具有管理权限的新角色,可以使用如下命令:

CREATE ROLE cloudbool WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'cloudbool_password';

使用新创建的账户及密码登录:

psql -U pg_user -W
# 输入密码

如果需要指定远程主机及端口,命令如下:

psql -h 127.0.0.1 -p 5432  -U cloudbool -W
# 输入密码

PostgreSQL常用Shell操作命令

和MySQL稍许不同,如果在Shell里面查看数据库、表及用户等信息,不是简单的select操作,PostgreSQL提供部分别的命令。

列出数据库中所有用户:

\du

列出所有数据库:

\l

连接到数据库:

\c database_name

列出数据库中的所有表:

\d

PostgreSQL schema操作

跟MySQL相比,PostgreSQL多了一个schema,一般情况下,创建数据库的时候会自动创建一个名为public的schema,手动创建schema命令如下:

CREATE SCHEMA test_schema;

创建表的过程中,如果没有指定schema,默认会将表归属到public schema,如果需要将表创建到指定schema,则命令如下:

CREATE TABLE test_schema.test_table ();

也即schema名称跟上表的名称。

PostgreSQL导入与导出

PostgreSQL的dump:

pg_dump -U cloudbool_user -W cloudbool_db > cloudbool_dump.sql

使用dump出的文件恢复数据库信息:

psql -U cloudbool_user -W cloudbool_db -f cloudbool_dump.sql

其中上述命令的cloudbool_user是用户名,cloudbool_db是对应的数据库,后续cloudbool_dump.sql是dump出的sql文件。