1. 安装说明
文档参考:http://www.postgres.cn/docs/12/install-short.html
源码下载:https://www.postgresql.org/ftp/source/v14.1/
操作系统 : 4.19.90-17.ky10.x86_64
数据库:v14.1 source
虚拟机:oracle virtual box 6.0.22
使用的操作系统安装可参考:https://www.cnblogs.com/syksky/p/15440086.html
2. 操作系统准备
2.1 本地yum源配置
virtualbox挂载操作系统iso后,使用下述命令挂载文件系统
mount -t auto /dev/sr0 /mnt
新增编辑/etc/yum.repos.d/kylin_local.repo
文件,添加以下内容
[kylin_local]
name = kylin local - os
baseurl = file:///mnt
gpgcheck = 0
enabled = 1
其中file:///mnt
是我们挂载的ISO所在文件路径,是否生效可以通过下述命令检查
yum repolist
输出如下
[root@kylin01 local]# yum repolist
repo id repo name
kylin_local kylin local - os
[root@kylin01 local]#
2.2 安装readline和zlib包
因为是源码安装方式,所以对应的readline和zlib的devel包也要安装
yum install readline-devel.x86_64 -y
yum install zlib-devel.x86_64 -y
编译PostgreSQL需要下列软件包:
要求GNU make版本3.80或以上;其他的make程序或更老的GNU make版本将不会工作(GNU make有时以名字gmake安装)。要测试GNU make可以输入:
make --version
你需要一个ISO/ANSI C 编译器(至少是 C99兼容的)。我们推荐使用最近版本的GCC,不过,众所周知的是PostgreSQL可以利用许多不同厂商的不同编译器进行编译。除了gzip和bzip2之外,我们还需要tar来解包源代码发布。
默认时将自动使用GNU Readline库。它允许psql(PostgreSQL的命令行 SQL 解释器)记住你输入的每一个命令并且允许你使用箭头键来找回和编辑之前的命令。如果你不想用它,那么你必需给configure声明--without-readline选项。作为一种可选方案,你常常可以使用 BSD许可证的libedit库,它最初是在NetBSD上开发的。libedit库是GNU Readline兼容的, 如果没有发现libreadline或者configure使用了--with-libedit-preferred选项,都会使用这个库。如果你使用的是一个基于包的 Linux 发布,那么要注意你需要readline和readline-devel两个包,特别是如果这两个包在你的版本里是分开的时候。
默认的时候将使用zlib压缩库。 如果你不想使用它,那么你必须给configure声明--without-zlib选项。使用这个选项关闭了在pg_dump和pg_restore中对压缩归档的支持。
from: http://www.postgres.cn/docs/12/install-requirements.html
3. 开始安装
3.1 解压安装包
下载后得到一个名为postgresql-14.1.tar.gz
或postgresql-14.1.tar.bz2
的文件。在你获取文件之后,解压缩它:
gunzip postgresql-14.1.tar.gz
tar xf postgresql-14.1.tar
如果是.bz2
文件,用bunzip2
代替gunzip
。这样将在当前目录创建一个目录postgresql-14.1
, 里面是PostgreSQL源代码。 进入这个目录完成安装过程的其他步骤。
3.2 编译安装
此处默认配置编译,详细的参数可以参考http://www.postgres.cn/docs/12/install-procedure.html。
./configure
make
make install
经过一段时间后,安装将完成。安装完成后,默认路径在/usr/local/pgsql/
注意此时的属主属于root:root
新增用户,并将软件属主进行修改
useradd pg
chown -R pg:pg /usr/local/pgsql
3.3 设置环境变量
配置pg的环境变量,pg用户下的~/.bash_profile
添加如下内容
PATH=/usr/local/pgsql/bin:$PATH
export PATH
LD_LIBRARY_PATH=/usr/local/pgsql/lib
export LD_LIBRARY_PATH
4. 配置文件系统
虚拟化操作系统的时候,新增了一个磁盘单独做pg的数据磁盘,磁盘在操作系统的名称为/dev/sdb
,使用lvm工具操作,并格式化为xfs。
挂载在/pgdata
目录下,属主为pg:pg
,并同步修改/etc/fstab
文件,使得开机自启动。
pvcreate /dev/sdb
vgcreate vg_pgdata /dev/sdb
vgdisplay
lvcreate -l 100%FREE -n lv_pgdata vg_pgdata
mkfs.xfs /dev/vg_pgdata/lv_pgdata
mkdir -p /pgdata
mount /dev/vg_pgdata/lv_pgdata /pgdata
chown pg:pg /pgdata/
5. 初始化数据库
初始化数据库,并构建初始数据库。
/usr/local/pgsql/bin/initdb -D /pgsql/data
/usr/local/pgsql/bin/pg_ctl -D /pgsql/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
详细日志
[root@kylin01 local]# su - pg
Last login: Tue Nov 30 15:25:02 CST 2021 on pts/1
[pg@kylin01 ~]$ ls -l /pgdata/
total 0
drwx------ 2 pg pg 6 Nov 30 13:11 data
[pg@kylin01 ~]$ /usr/local/pgsql/bin/initdb -D /pgdata/data
The files belonging to this database system will be owned by user "pg".
This user must also own the server process.
The database cluster will be initialized with locale "en_US".
The default database encoding has accordingly been set to "LATIN1".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /pgdata/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/local/pgsql/bin/pg_ctl -D /pgdata/data -l logfile start
[pg@kylin01 ~]$ /usr/local/pgsql/bin/pg_ctl -D /pgdata/data -l logfile start
waiting for server to start.... done
server started
[pg@kylin01 ~]$
[pg@kylin01 ~]$
[pg@kylin01 ~]$ /usr/local/pgsql/bin/createdb test
[pg@kylin01 ~]$ /usr/local/pgsql/bin/psql test
psql (14.1)
Type "help" for help.
test=# select current_database();
current_database
------------------
test
(1 row)
test=#