CentOS默认Yum源安装的PostgreSQL版本仍然停留在8.x。如果不想手工编译,又想安装使用最新版的PostgreSQL的话,可以通过引用PostgreSQL官方的Yum源进行安装。
一、安装PostgreSQL
-
在CentOS默认的Yum源文件里屏蔽对PostgreSQL的获取
# vi /etc/yum.repos.d/CentOS-Base.repo
在[base]以及[updates] 部分的最下方,各增加一行
exclude=postgresql*
-
添加PostgreSQL官方的Yum源文件
# yum localinstall http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm
-
查找最新版本
# yum list postgres*
-
安装最新版本(例如安装9.4)
# yum -y install postgresql94-server postgresql94 postgresql94-libs postgresql94-contrib postgresql94-devel
yum安装后的文件路径如下:
- 执行文件:
/usr/pgsql-9.4/bin/
- 默认数据库文件目录:
/var/lib/pgsql/9.4/data
- 启动脚本:
/etc/init.d/postgresql-9.4
设置开机自启动:
# chkconfig postgresql-9.4 on
- 执行文件:
二、初始化数据库
**注意:**由于PostgreSQL在创建数据库时,会参照/etc/sysconfig/i18n里面的LANG参数。而Linux系统这个参数一般默认为c,所以如果直接用initdb命令的话,创建的PostgresQL数据库的编码为ascii编码.这会给将来的unicode应用造成一些潜在的麻烦,所以:
- 要么将系统设置成参数,LANG=“zh_CN.UTF8”
- 如果不想修改系统的语言参数,需要在initdb命令初始化数据库时候,指定编码格式及字符集。
-
修改postgres用户的密码,然后以postgres身份登陆
# passwd postgres # 修改密码 # su - postgres
-
增加postgres用户的path路径
$ cd $ echo 'export PATH=$PATH:/usr/pgsql-9.4/bin' >> .bash_profile $ source .bash_profile
-
初始化数据库。根据部署的需要,设置相应的UTF8及字符集环境
简体中文:zh_CN.UTF8,日文: ja_JP.UTF8; 英文:en_US.UTF8 如果初始化错了,可以使用直接删除已经创建的目录,然后重新初始化:
$ rm /var/lib/pgsql/9.4/data -rf
# 常用的简体中文 $initdb -E 'UTF-8' --lc-collate='zh_CN.UTF8' --lc-ctype='zh_CN.UTF8'
三、初始化数据库
-
配置PosgtreSQL的启动参数
$ cd 9.4/data/ $ vi postgresql.conf
修改成
listen_addresses = '*'
,表示监听所有IP地址(需要加强防火墙设置,否则有安全隐患)修改成
log_filename = 'postgresql-%Y%m%d.log'
,指定日志文件的格式为2016-04-01.log这样的日期格式。 -
配置PosgtreSQL的用户登录验证方式
$ vi pg_hba.conf
将默认的peer的认证方式全部注释掉,在文件的末尾重新添加md5方式,例如:
local all postgres peer local all all md5 host all all 192.168.0.0/24 md5
-
启动PosgtreSQL服务
root权限下
# service postgresql-9.4 start
四、开始使用PostgreSQL
切换到postgres账号终端下
# su - postgres
-
createdb命令:创建数据库
$ createdb dbtest
-
createuser命令:创建账号
$ createuser dbuser1
-
psql终端下:设置/修改DB用户的密码
$ psql -U postgres
在psql终端下,通过以下命令修改密码
postgres=# ALTER USER dbuser1 encrypted password 'mypass';
-
psql终端下查看数据库
postgres=# \l
-
修改数据库的拥有者
postgres=# ALTER DATABASE dbtest OWNER TO dbuser1;
-
退出psql终端
postgres=# \q
-
指定用户名及数据库登陆psql
$ psql -U dbuser1 dbtest