文章目录
聊这个事,我觉得先从环境准备开始比较顺。操作系统方面,我这边用的是 Centos7,搭配的 PostgreSQL 版本是 9.6.24。安装包可以从官方源获取,需要下载的文件有四个:postgresql96-9.6.24-1PGDG.rhel7.x86_64.rpm、postgresql96-contrib-9.6.24-1PGDG.rhel7.x86_64.rpm、postgresql96-libs-9.6.24-1PGDG.rhel7.x86_64.rpm 以及 postgresql96-server-9.6.24-1PGDG.rhel7.x86_64.rpm。如果要用其他版本,记得这几个包的版本号必须保持一致。

安装
安装pg服务
把下载好的文件上传到服务器,然后一条命令全部搞定:
rpm -ivh postgresql96-*.rpm

如果安装过程中提示缺少依赖,别跳过,老老实实去下载对应版本补上。
配置环境变量
为了方便后续操作,可以把 pg 的安装路径加到环境变量里。打开 /etc/profile,在 PATH 后面追加上 /usr/pgsql-9.6/bin 这个路径,多个路径之间用“:”隔开:
vim /etc/profile
export PATH=$PATH:/usr/pgsql-9.6/bin
source /etc/profile
postgres --version

初始化数据库
接下来进入工作目录去初始化数据库:
cd /usr/pgsql-9.6/bin/
./postgresql96-setup initdb


如果已经配好了环境变量,直接在任意目录执行 postgresql96-setup initdb 也行。
pg数据库的配置及使用
启动数据库
安装完并不会自动启动,不过系统已经注册了一个叫 postgresql-9.6 的服务。启动、关闭、重启、查看状态用下面这些命令就行:
systemctl start postgresql-9.6
systemctl stop postgresql-9.6
systemctl restart postgresql-9.6
systemctl status postgresql-9.6

数据库使用
实际开发中多数情况会用客户端工具操作,这里只简单说一下命令行方式。先切换到 postgres 用户(安装时默认创建的管理员账号),然后进入 psql 交互界面:
su postgres
psql
进入后,输入 ? 可以查看所有命令的帮助信息。几个常用命令:\db 显示所有的表空间,\? 帮助,\q 退出 psql,\c 连接数据库。

关于执行 SQL 有一个小细节需要注意:pg 有缓冲区概念。输入 \p 可以打印当前查询缓存的内容,\r 重置缓存区,\g 执行缓冲区里的 SQL。当然你也可以直接输入 SQL 语句,以“;”结尾就会立即执行。具体细节上,可以参考命令行的帮助信息。
数据库配置
按照上面的步骤配置并启动后,你会发现客户端工具根本连不上。原因很简单:pg 默认只监听本地端口,并且对主机访问做了限制。想要远程访问,需要改两个地方。
首先,修改端口绑定配置,让它监听所有地址:
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
# 找到 listen_addresses,放开注释并改为 '*'
listen_addresses = '*'

改完重启数据库。不过这时候还连不上,因为还缺最后一步——配置远程访问权限。需要接着修改 pg_hba.conf 文件:
cd /var/lib/pgsql/9.6/data/
vim pg_hba.conf
# 添加允许访问的网段,格式为:ip/掩码
host all all 192.168.0.0/16 trust

类型 host 表示远程访问,数据库和用户按实际需求填写,all 代表所有。最后的 trust 是认证方式。pg_hba.conf 文件开头的大段英文注释对这几列有详细说明,值得花几分钟看一下。
改完再重启数据库,远程访问就生效了。到此,一个简单的 pg 安装和配置就完成了,接下来就可以通过客户端工具愉快地探索了。

附录
附录1:psql命令帮助
以下是一些常用命令的说明,供参考:
? [commands] 显示反斜线命令的帮助
? options 显示 psql 命令行选项的帮助
? variables 显示特殊变量的帮助
\h [名称] SQL命令语法说明,* 显示全部
\e [FILE] [LINE] 使用外部编辑器编辑查询缓存区
\p 显示查询缓存区内容
\r 重置查询缓存区
\s [文件] 显示历史记录或保存到文件
\w 文件 将查询缓存区写入文件
\i 文件 从文件执行命令
\o [文件] 将所有查询结果写入文件
\qecho [字符串] 将字符串写到查询输出流
\d[S+] 列出表、视图和序列
\d[S+] 名称 描述表、视图、序列或索引
\dt[S+] [PATTERN] 列出表
\dv[S+] [PATTERN] 列出视图
\ds[S+] [PATTERN] 列出序列
\df[antw][S+] [PATTERN] 列出函数
\du[S+] [PATTERN] 列出角色
\l[+] [PATTERN] 列出所有数据库
\c[onnect] 连接到新数据库
\encoding [编码名称] 显示或设定客户端编码
\password [USERNAME] 安全地修改用户密码
\! [命令] 在 shell 中执行命令或启动交互式 shell
\set [名称 [值]] 设定内部变量,无参数则列出全部
\unset 名称 删除内部变量