1、首先需要超级管理员登陆服务器,新建OS用户 postgresuser用户专门管理postgres,新建用户之前新建postgresuser用户组,然后将postgresuser加入用户组:
groupadd postgresuser;
useradd -u 544 -d /home/postgresuser -g postgresuser -m postgresuser;
修改postgresuser 用户密码:
passwd postgresuser;
2、切换到postgresuser用户的/home目录
su postgresuser
cd ~
3、下载postgresql 源码(各个版本的源码地址:https://www.postgresql.org/ftp/source/):
wget https://ftp.postgresql.org/pub/source/v9.5.0/postgresql-9.5.0.tar.gz;
解压: tar -zxvf postgresql-9.5.0.tar.gz
新建俩个目录一个用于安装postgresql,另一个用于初始化pg集群数据
mkdir -p ./data/app/postgres9.5;(存放pg安装程序的目录)
mkdir -p ./data/pgdata;(存放数据库数据目录)
进入解压目录: cd postgresql-9.5.0
配置检测系统相关环境是否符合:./configure --prefix=/home/postgresuser/data/app/postgres9.5
会出项上面这个依赖错误,输出结果告诉我们readline不存在,这其中的原因是readline-devel缺失,他包含了那些使用readline库的程序(如psql)所需要的各个文件,可以使用以下命令安装(切换到root用户):
yum install readline-devel.x86_64
重新执行环境监测命令./configure --prefix=/home/postgresuser/data/app/postgres9.5又会出现下面这个错误
虽然zlib本身已经安装,任然需要安装devel,在这种情况下,需要安装的是-devel:
yum install zlib-devel.x86_64;
再次进行环境监测./configure --prefix=/home/postgresuser/data/app/postgres9.5 这次将会顺利完成;
变异安装:make && make install,最后显示PostgreSQL installation complete的话那么postgresql就顺利安装完毕
4、将PostgreSQL可执行文件目录配置到环境变量PATH中;
vim ~/.bashrc
PATH=$PATH:$HOME/bin:/home/postgresuser/data/app/postgres9.5/bin
export PATH
5、设置PGDATA环境变量,initdb命令默认初始化数据的目录
vim ~/.bashrc
PGDATA=/home/postgresuser/data/pgdata
export PGDATA
source ~/.bashrc
6、初始化数据目录 initdb -D $PGDATA --pwprompt
--pwprompt这一参数用于初始化数据目录的时候顺便设置一下数据库超级管理员的密码;
正如上面初始化数据目录完毕最后提示的,我们可以使用命令:pg_ctl -D /home/postgresuser/data/pgdata -l logfile start 启动PostgreSQL数据库了;
7、pg_ctl是一个实用程序,用于启动、停止、检查状态、或者重启数据库集群。
8、快速了解各个数据目录的作用:
运行 find ./ maxdepth 1 -type d 查看数据目录下的目录有哪些:
a、base:该目录包含数据库用户所创建的各个数据库,同时包含了数据库postgres、template0、template1的pg_default tablespace,我们可以进入/home/postgresuser/postgresql-9.5.0/contrib/oid2name目录安装oid2name 工具(id转换成name的命令行工具,不属于extension):
make && make install
,oid2name将会安装到数据库安装目录的bin目录,然后在base目录下执行命令:oid2name可以查看到以下信息:
可以看到oid指向了base目录下的目录名字,我们可以创建删除数据库,然后执行该命令看看变化:
补充:OID表示对象标识符。他们作为各种系统表的主键,在PG内部进行使用,属具目録中创建的对象(表、数据库等)将借助OID进行关联,oid2name根据作为contrib模块,可以帮助我们检查数据库、表以及相关文件节点。
b、global:这个目录包含集群范围额各个表,这里有很多表以及相关视图,来跟踪整个集群,即数据库的各个角色、系统类目数据等。
c、pg_clog:这个目录包含事务提交状态数据。
d、pg_multixact:这个目录包含多事务状态数据(等待锁定的并发事务)
e、pg_notify:这个目录包含LISTEN/NOTIFY 状态数据。
f、pg_serial:这个目录包含了已提交的序列化事务的相关信息。
g、pg_snapshots:这个目录包含导出的快照。
h、pg_stat_tmp:这个目录包含统计子系统的临时文件。
i、pg_subtrans:这个目录包含子事务状态数据。
j、pg_tblspc:这个目录包含了表空间的符号链接。
k、pg_twophase:这个目录包含预备事务的状态文件。
l、pg_xlog:这个目录包含了预写日志文件(Write Ahead Log,WAL),讲到流复制的时候将会提到这个文件。
pg_logical、pg_dynshmem、pg_stat、pg_replslot、pg_commit_ts等还未搞清楚,待定。
9、几个常用的命令介绍:
a、查看postgresuser用户进程:ps -fUpostgresuser
b、以上进程号为29724的进程下有许多子进程,该父进程的PID可以在$PGDATA 中的postmaster.pid的第一行查看到,也可以通过命令 pg_ctl status查看到:
网友评论