最近有项目用到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文件。