把压缩文件下载到你的服务器上。
[root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src]# wget http://src.12cc.com/postgresql-12.1.tar.gz
文件下载完后,接着把文件解压到当前目录里。[root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src]# tar -zxvf ./postgresql-12.1.tar.gz
解压完成,在当前目录下会自动生成一个文件夹"postgresql-12.1",我们要的源文件全部在这文件夹里。进入该文件夹。
[root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src]#
cd postgresql-12.1
[root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src/postgresql-12.1]#
注意当前路径的变化。
查看当前文件夹有哪些文件。
我们要的编译文件就是:configure
执行以下命令编译。
[root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# ./configure --prefix=/usr/local/pgsql
参数:--prefix=/usr/local/pgsql
表示编译好的文件放到目录"/usr/local/pgsql"里,这个目录不用用户自己创建,编译过程会自动创建。
PostgreSQL编译过程会用到一些依赖的库,如果你的操作系统比较旧,编译过程可能会出现错误,告诉你要安装缺少的依赖库。
我们编译时就出现了没有C编译器的报错。执行以下命令解决。
[root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# yum install gcc
安装完gcc后再次编译postgres,再次发现提示缺少readline库,如下图:
但是通过rpm -qa | grep readline命令查看,发现系统默认是自带readline包的,如下图:
那么肯定还是缺少与readline相关的包了,通过yum search readline进行搜索可以发现一个readline-devel包,如下图:
其实我们缺少的正是这个readline开发包(readline-devel),而不是readline包,所以接下来安装一下readline-devel,指令如下。
[root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# yum install readline-devel
安装完成后再次编译PostgreSQL,还是报错,这次提示缺少zlib库,如下图。
同理,缺少的依然是zlib开发包(zlib-devel)而并不是zlib包,所以继续安装zlib-devel。
[root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]# yum install zlib-devel
安装完成后,再次编译PostgreSQL,成功了,可以看到提示创建了config.status配置文件:
编译完成后,依次执行以下指令,完成安装任务。
[root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]#
make
[root@iZ28lcmnq9qZ /usr/local/src/postgresql-12.1]#
make install
完成以后,在"--prefix=/usr/local/pgsql"参数对应的"/usr/local/pgsql"的目录就是我们所有PostgreSQL存放的文件。
编译安装成功后,接下来要做的就是创建一个普通用户,因为默认Linux超级用户(root)不能启动PostgreSQL,所以需要创建一个普通用户来操作数据库。
[root@iZ28lcmnq9qZ /usr/local/pgsql]#groupadd postgres #创建postgres用户组
[root@iZ28lcmnq9qZ /usr/local/pgsql]#
useradd -g postgres -G postgres -d /home/postgresql postgres #创建postgres用户
[root@iZ28lcmnq9qZ /usr/local/pgsql]#
passwd postgres #设置postgres用户的密码
执行以下指令。
[root@iZ28lcmnq9qZ /usr/local/pgsql]#mkdir data
[root@iZ28lcmnq9qZ /usr/local/pgsql]#mkdir log
接下来需要设置权限,将/usr/local/pgsql (我们安装PostgreSQL数据库的目录) 目录全部赋权给postgres用户,指令如下。
[root@iZ28lcmnq9qZ /usr/local/pgsql]#cd .. //返回上一层目录
[root@iZ28lcmnq9qZ /usr/local]#chown -R postgres:postgres /usr/local/pgsql/
为了方便起见设置一下相关的环境变量,此处是要设置postgres用户的环境变量,所以首先要把Linux的登陆用户由root切换到以postgres用户登陆,指令如下。
[root@iZ28lcmnq9qZ /usr/local]#su - postgres
因为我们创建Linux用户"postgres"是指定了用户的目录为"/home/postgresql",所以登陆后显示的目录是:[postgres@iZ28lcmnq9qZ /home/postgresql]$
要创建环境变量,实际上就是对文件.bash_profile的修改,所以我们首先要找到这个文件,这个文件就在"/home/postgresql"里。我们用以下指令查看是不是有这个文件。
[postgres@iZ28lcmnq9qZ /home/postgresql]$ll
奇怪的是,目录下并没有发现".bash_profile"文件,原因是".bash_profile"是一个隐藏的文件,用指令"ll"是看不到的,要加上参数"-a",指令如下。
编辑".bash_profile"文件。
[postgres@iZ28lcmnq9qZ /home/postgresql]$vim .bash_profile
插入下图红框内容。
要使设置的环境变量".bash_profile"生效,可以执行指令。
[postgres@iZ28lcmnq9qZ /home/postgresql]$source ./.bash_profile
检查是否生效,可以用以下指令。
[postgres@iZ28lcmnq9qZ /home/postgresql]$psql -V
如果成功,会显示PostgreSQL的版本信息。
新安装的PostgreSQL数据库系统,要先初始化基本的基础数据库,然后我们才能在上面创建我们自己的数据库。
初始化数据库的指令是"initdb",这个指令位于"/usr/local/pgsql/bin/"
我们可以用指令"initdb --help"看看这个文件的帮助信息。
如上图,可以看到在使用"initdb"进行初始化的时,可以指定参数进行一些初始化工作,例如指定pgdata(postgresql数据库目录)、指定encoding(编码)、指定数据库超级用户的用户名和密码等等。注意,如果pgdata目录没有指定,则会默认使用环境变量中的PGDATA指定的目录作为数据库存放的目录,由于之前我们刚刚设置了"PGDATA=/usr/local/pgsql/data"环境变量,所以此处我们也就无需再额外指定,直接执行初始化命令即可。
[root@iZ28lcmnq9qZ /usr/local/pgsql]#initdb
看到如下信息就说明初始化成功了。
同时在"/usr/local/pgsql/data]"的目录可以看到生成的数据和配置文件等。
主要是配置postgresql.conf 和 pg_hba.conf 个。
1.postgresql.conf 针对实例的配置
2.pg_hba.conf 针对数据库访问的控制
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#vim postgresql.conf
找到"#port"和"#listener_address"这两个参数,这两个参数是相邻的,将两行行首的"#"删除。
将"listen_addressee='localhost'"改为当前服务器的IP,如果改为"listen_addressee='*'",将监听整个网络。
默认的监听端口是5432,可以自行指定另外一个端口号。
max_connections是客户端最大的连接数, 缺省值100有点少,特别是业务系统,可以调整成1000或者更高。
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#vim pg_hba.conf
如何将红框设置为 10.10.100.0/24,意思是10.10.100网段的IP 连接此服务器上的PostgreSQL. 如果想允许所有IP都可以连接此服务器,则可以配置成0.0.0.0/0,但这样是不安全的,可以把trust改为md5,表示需要密码访问,算是提供一个最低级的安全防护。
启动与关闭数据库是执行pg_ctl命令,在执行时,需要指定数据库路径和日志文件路径,格式如下。
pg_ctl -D <数据存放路径> -l <日志文件路径> [ stop | start ]
如果已经指定了环境变量PGDATA,"数据存放路径"参数可以省略。
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg_server.log start
可以通过ps -ef|grep postgres查看PostgreSQL相关进程是否启动,如下图说明已启动成功。
关闭数据库执行以下指令。
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg_server.log stop
此步骤需要root用户操作,如果你是用PostgreSQL的用户postgres登陆的话,要用exit指令退出,回到root登陆才能操作。
PostgreSQL解压后的安装包目录中提供了数据库启动与关闭的脚本,此脚本不但可以帮助我们简化操作,而且可以用作开机启动的脚本和service/systemctl 控制服务的脚本。 脚本文件就位于我们下载后解压文件的目录里:/usr/local/src/postgresql-12.1/contrib/start-scripts
目录里"linux"文件就是我们要找的文件。
执行以下指令。
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#cp /usr/local/src/postgresql-12.1/contrib/start-scripts/linux /etc/init.d/postgresql
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#chkconfig --add postgresql
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#chmod 755 /etc/init.d/postgresql
把文件"linux"拷贝到目录"etc/init.d/"下,并改名为postgresql。
把脚本文件"postgresql"加入到开机启动的程序列表。
赋予"postgresql"文件有执行的权限。
主要设置文件"postgresql"的四个变量的值。
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#vim /etc/init.d/postgresql
prefix=/usr/local/pgsql
PGDATA="/usr/local/pgsql/data"
PGUSER=postgres
PGLOG="$PGDATA/serverlog"
prefix 是软件的安装路径
PGDATA 是数据存放路径
PGUSER 是启动PostgreSQL服务器的用户
PGLOG 是日志文件
以后可以开机启动和通过service 命令控制启动和关闭了。
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#service postgresql start
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#service postgresql stop
温馨提示:用客户端程序psql连接数据库前,要把当前Linux登陆用户从root切换到postgres用户,这个是我们创建的PostgreSQL的超级用户。
[root@iZ28lcmnq9qZ /usr/local/pgsql/data]#su - postgres
[postgres@iZ28lcmnq9qZ /home/postgresql]$psql
可以看到,已经连接上了数据库服务器,而且当前连接的是PostgreSQL的缺省数据库postgres。现在我们可以在这个命令行用SQL语言操作PostgreSQL数据库。
postgres=# \password
命令"\l"是显示数据库。更多的SQL操作命令可以参考PostgreSQL的官方文档。
退出pgsql客户端命令是"\q"。
PostgreSQL安装到此完毕。