出了使用apt包管理器安装PostgreSQL之外,我们还可以自己手工编译源代码来安装。虽然自己编译,比较复杂,但我们却可以使用最新的版本。
本文记录使用源码编译的方法,安装PostgreSQL的过程。
编译安装
0x00:创建用户和用户组
1 | # 创建用户组 |
0x01:下载源代码
PostgreSQL源代码下载页面:https://www.postgresql.org/ftp/source
我们选择安装当前最新版本v16.1,在服务器上使用下面的命令下载和解压。
1 | $ wget https://ftp.postgresql.org/pub/source/v16.1/postgresql-16.1.tar.gz |
0x02:安装依赖库
1 | sudo apt install libssl-dev |
0x03:配置
使用如下命令配置编译选项:
1 | $ cd postgresql-16.1 |
配置成功之后,会在当前目录下生成我们需要的 Makefile 文件,如下图所示:
0x04:编译
使用如下命令执行编译:
1 | $ make |
编译完成,没有错误,如下图所示:
0x05:安装
使用如下命令进行安装:
1 | $ make install |
安装完毕之后,由于前面configure时,我们指定安装到 /home/postgres/apps/postgresql-16.1 ,所以到该目录看下安装文件情况:
为了方便以后的版本升级,我们做个软连接:
1 | $ ln -sfn postgresql-16.1 postgresql |
0x06:将PostgreSQL可执行程序目录加入PATH环境变量
修改 /etc/profile ,加入如下内容:
1 | export PG_HOME=/home/postgre/apps/postgresql |
至此,我们已经成功编译PostgreSQL,并将其安装到我们指定的目录。下面我开始初始化数据库,并做一些简单的使用操作。
初始化数据库
1 | $ initdb -D /data/postgresql/data/16.1/main |
- -D 参数指定postgresql的数据文件路径
初始化数据库过程如下图所示:
初始化数据库完成之后,我们看下数据目录的结构:
考虑到后续我们会修改配置,防止误操作数据,我们将配置文件移动到专门的配置文件目录中去:
1 | $ mv *.conf /data/postgresql/conf/16.1/main |
修改配置文件
我们简单修改下 /data/postgresql/conf/16.1/main/postgresql.conf 文件(修改后的文件,可点击下载),区别如下图所示:
启动PostgreSQL数据库
使用如下命令启动数据库:
1 | $ postgres -D /data/postgresql/data/16.1/main -c config_file=/data/postgresql/conf/16.1/main/postgresql.conf |
启动后如下图所示:
我们使用 psql 登录服务器服务器,如下图登录:
或者通过5432端口,通过网络登录服务器,如下图登录:
至此,我们已经成功启动PostgreSQL数据,并能够登录服务器。下面介绍下PostgreSQL的简单使用方法。
使用PostgreSQL数据库
使用1:创建PostgreSQL数据库用户
我们使用如下命令,创建一个数据库用户:user_mancode;登录密码为:123456;对应数据库为:db_mancode。
1 | CREATE USER user_mancode WITH PASSWORD '123456'; |
创建过程如下图所示:
然后我们通过网络端口5432,使用 user_mancode 来登录服务器。
1 | psql -U user_mancode -d db_mancode -h 127.0.0.1 -p 5432 |
我们使用新创建的 user_mancode 数据库可以成功登录服务器。
使用2:远程登录数据库服务器
上节我们使用psql -U user_mancode -d db_mancode -h 127.0.0.1 -p 5432
登录数据库时,发现没有?没有要求我们输入密码。怎么回事?
简单来说,其实在pg_hpa.conf配置文件中,指定了来自127.0.0.1的登录是可信的,不需要密码进行登录。
配置文件是这样的:
我们知道数据库服务启动在192.168.0.62:5432端口上,假如我们使用 psql -U user_mancode -d db_mancode -h 192.168.0.62 -p 5432
是不是也能正确登录?我们试下:
可见,登录失败,提示我们错误:
psql: error: connection to server at “192.168.0.62”, port 5432 failed: FATAL: no pg_hba.conf entry for host “192.168.0.62”, user “user_mancode”, database “db_mancode”, no encryption
解决方法是,在pg_hpa.conf文件中加入登录项,如下图所示:
重启服务器,我们再次使用 psql -U user_mancode -d db_mancode -h 192.168.0.62 -p 5432
,登录时会要求我们输入密码,然后输入创建用户时设置的密码 123456
,就可以正常登录服务器了。
使用3:简单SQL操作示例
1 | # 创建新表 |
执行过程如下图所示:
数据库启停方法
方法一:如上文一样,使用 postgres 直接启动服务,停止Ctrl+C即可。
1 | ## 启动数据库服务 |
启停情况如下图所示:
方法二:使用 pg_ctl 命令启停服务。
1 | ## 启动数据库服务 |
启停情况如下图所示:
方法三:通过systemd启停服务。
创建systemd的Unit文件:/lib/systemd/system/postgresql.service ,内容如下:
1 | [Unit] |
随机启动生效命令:
1 | $ sudo systemctl enable postgresql |
使用systemctl启动服务命令:
1 | $ sudo systemctl start postgresql |
使用systemctl停止服务命令:
1 | $ sudo systemctl start postgresql |
使用systemctl查看服务状态:
1 | $ sudo systemctl status postgresql |