因为最近要做个数据研究,需要把数据入库,开源数据库中,同学们一般可能都会选择mysql,不过mysql 的一些函数能是在太累,因此我这边换成使用起来与oracle 更为相似的postgresql,近来这个数据库也是极其热门,上升速度很快。
下面做个编译与安装介绍,以下内容基本都来自德哥分享(http://blog.163.com/digoal@126/)的文档,感谢德哥的分享。
?
Postgresql下载网址:
http://www.postgresql.org/ftp/source/
?
这里我们选择最新的稳定版版postgresql-9.4.4 的源码版
https://ftp.postgresql.org/pub/source/v9.4.4/postgresql-9.4.4.tar.bz2
下载后解压
tar jxvf postgresql-9.4.4.tar.bz2
因为postgresql不能用root 用户启动,需要为他重新新建一个用户
创建用户
?
useradd pg944
?
进入下载的目录
cd postgresql-9.4.4
编译,这里设置安装目录
./configure --prefix=/home/pg944/pgsql
完成后执行
gmake world
gmake install-world
下面初始化数据库相关配置
首先修改Linux内核相关参数调整
?
vi /etc/sysctl.conf
?
在最下面加上
kernel.shmmni = 4096
kernel.sem = 50100 64128000 50100 1280
fs.file-max = 7672460
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
然后继续修改
?
vi /etc/security/limits.conf
?
在最下面加上
* soft nofile 131072
* hard nofile 131072
* soft nproc 131072
* hard nproc 131072
* soft core unlimited
* hard core unlimited
* soft memlock 50000000
* hard memlock 50000000
设置防火墙
?
vi /etc/sysconfig/iptables
?
加上端口,记得在端口22的那个设置下加,不要加到最下面
?
-A RH-Firewall-1-INPUT -p tcp -m tcp--dport 1999 -j ACCEPT
?
重启防火墙
?
service iptables restart
?
现在初始化postgresql 用户的相关配置
?
su - pg944
?
添加环境变量
vi ~/.bash_profile
加上
export PGPORT=1999
export PGDATA=/home/pg944/pg_root
export LANG=en_US.utf8
export PGHOME=/home/pg944/pgsql
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/share/man:$MANPATH
export PGUSER=postgres
export PGHOST=$PGDATA
alias rm='rm -i'
alias ll='ls -lh'
export PGDATABASE=postgres
保存设置
?
source ~/.bash_profile
?
初始化数据库
?
initdb -D $PGDATA -E UTF8 --locale=C -U postgres -W
?
这里要输入密码,和输入确认密码,输错会让你重新初始化
?
测试下
?
[pg944@slave1 ~]$ psql -V
psql (PostgreSQL) 9.4.4
?
这个时候$PGDATA这里就可以看到数据库文件了。下面挑几个重要的说说
ll $PGDATA
base -- 这个目录对应pg_default表空间
global --这个目录对应pg_global表空间, 存放集群中的共享对象例pg_database表, (select relkind,relname from pg_class where reltablespace = (select oid from pg_tablespace where spcname=‘pg_global’)
order by 1) , 包含控制文件等.
pg_clog -- 存储事务提交状态数据
pg_hba.conf -- 数据库访问控制文件
pg_log -- 数据库日志目录(根据配置定义, 可能没有这个目录)
pg_multixact -- 共享行锁的事务状态数据
PG_VERSION -- 数据库版本
pg_xlog -- 存储WAL文件
postgresql.conf -- 配置文件
postmaster.opts -- 记录数据库启动时的命令行选项
postmaster.pid -- 数据库启动的主进程信息文件(包括$PGDATA目录, 数据库启动时间, 监听端口ipc信息等)
继续
?
cd $PGDATA
?
启动数据库前修改一下$PGDATA下面的pg_hba.conf和postgresql.conf
pg_hba.conf用于配置控制访问数据库的来源
这里为了方便设置对所有地址开放,很不安全
?
host all all 0.0.0.0/0 md5
?
postgresql.conf是数据库的主配置文件, 最好也调整一下Linux内核参数.
下面内容会比较多
?
vi postgresql.conf
?
*****************************************************
监听IPv4的所有IP.
listen_addresses = '0.0.0.0'
?
最大允许1000个连接(测试的话100够了, 加大连接数同时需要调整shared buffer).
max_connections = 100
为超级用户保留10个可用连接.
superuser_reserved_connections = 10
默认的unix socket文件放在/tmp, 修改为$PGDATA, 以确保本地访问的安全性.
unix_socket_directory = '.'
?
默认的访问权限是0777, 修改为0700更安全.
unix_socket_permissions = 0