系统版本:Ubuntu 16.04
一. 安装:
sudo apt-get install postgresql
- 安装9.4或者其他低版本:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
二. 启动
- 启动服务:
sudo service postgresql start
- 切换至postgres用户:
sudo -su postgres
- 进入控制台:
psql
以上为一些基本的准备操作,其他命令可以参考: http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql.html
三. 配置
- 输入
ps -ef | grep postgres
看一下进程信息可以发现postgres的service启动命令是这样的:
也就是说当前postgres的数据库文件是/var/lib/postgresql/9.5/main
,配置文件是/etc/postgresql/9.5/main/postgresql.conf
- 看一下config文件,还是很友好,比较容易理解
这里指定了一个hba_file
也就是pg_hba.conf
(host-based authentication)就是配置数据库的访问权限,默认只能localhost访问 - 看一下hba.conf
第一行local all postgres peer
解释为:连接本地postgres数据库的时候只要系统切换到postgres用户即可登陆,并且可以访问任何数据库;如果给peer改成trust(改完重启服务),则可以实现linux所有本地用户都可以用psql -U postgres
来连接数据库;md5就是需要密码访问psql -U xxx -W
或PGPASSWORD=... psql -U ... -d ...
; - 开放远程访问:
修改postgresql.conf,取消注释或者加一行listen_addresses = '*'
修改pg_hba.conf,增加一行# TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 0.0.0.0/0 md5
四. 运行多个实例
切换至postgres用户并创建数据库文件,就在默认库隔壁来一个吧
sudo -su postgres
/usr/lib/postgresql/9.5/bin/pg_ctl init -D /var/lib/postgresql/9.5/main_2
这里有一些提示信息,先不管
在main_2目录里默认给我们生成了pg_hba.conf和postgres.conf,查看一下postgres.conf发现没指定端口和hba_path,可以copy之前的conf文件
/etc/postgresql/9.5/main/postgresql.conf
到main_2目录,修改:
data_directory = '/var/lib/postgresql/9.5/main_2'
hba_file = '/var/lib/postgresql/9.5/main_2/pg_hba.conf'
ident_file = '/var/lib/postgresql/9.5/main_2/pg_ident.conf'
external_pid_file = '/var/run/postgresql/9.5-main-2.pid'
#不能跟之前一个一样
port = 5433
再启动服务
/usr/lib/postgresql/9.5/bin/pg_ctl -D /var/lib/postgresql/9.5/main_2 -l /var/log/postgresql/pg_5433.log start
同理如果是从生产环境下直接下载下来的数据库文件,解压后也是同样方式运行,修改pg_hba.conf和postgres.conf文件即可