0. 前言
本文主要记录源码安装postgresql的过程,打开了debug相关内容,方便后续通过gdb进行调试。同时包含了设置postgresql系统服务相关内容,以及配置多个数据库实例的内容。
1. 环境信息
centos 7 2004, postgresql 12.4
2. 编译安装
2.1解压源码
su
unzip postgres-master.zip
mv postgres-master /usr/local/pgsql
2.2 安装依赖包
yum -y install gcc gcc-c++ automake autoconf libtool make readline-devel zlib-devel readline felx bison
2.3 编译安装
cd /usr/local/pgsql/
./configure --prefix=/usr/local/pgsql --enable-debug --enable-cassert --enable-depend CFLAGS=-O0
make
make install
- -prefix : 指定安装的目录
- --enable-debug : 把所有程序和库以带有调试符号的方式编译,相当于gcc的-g
- --enable-cassert : 打开服务器中的断言(assertion)检查,它会检查许多”不可能发生”的条件。
- -enable-depend : 打开自动依赖性跟踪。
- CFLAGS=-O0 : 关闭优化
3. 初始化数据库
3.1 添加数据库用户
adduser postgres
passwd postgres
chown -R postgres:root /usr/local/pgsql
3.2 初始化数据库
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
* postgresql支持同时运行多个数据库实例,每个实例对应自己的数据库目录,监听各自的端口。可以通过多次执行此步骤,初始化多个数据库实例,只需要指定不同的数据库目录,如/usr/local/pgsql/data1
4. 配置数据库
4.1 数据库访问设置
设置为允许所有连接
> vim /usr/local/pgsql/data/pg_hba.conf
host all all 0.0.0.0/0 trust
4.2 侦听所有连接
> vim /usr/local/pgsql/data/postgresql.conf
listen_addresses = '*'
logging_collector = on
4.3 修改监听端口
> vim /usr/local/pgsql/data/postgresql.conf
port = 5432
* 如果初始化多个数据库实例,每个实例需要指定不同的端口号,如5433
4.4 设置环境变量
> vim ~/.bashrc
export PATH=$PATH:/usr/local/pgsql/bin
export PGDATA=/usr/local/pgsql/data
> source ~/.bashrc
5. 启动数据库
启动数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
连接数据库
[postgres@centos8-pg12 ~]$ psql
psql (14devel)
Type "help" for help.
postgres=#
* 如果初始化多个数据库实例,每个实例需要指定不同的端口号,如5433
// connect to pg listening on 5432
psql -p 5432 -U postgres
// connect to pg listening on 5433
psql -p 5433 -U postgres
创建新的数据库
createdb -p 5432 test
// connect to pg listening on 5432, database test
psql -p 5432 -U test
* 如果不通过-p指定端口号,则会默认连接5432, 也可以通过下面配置指定psql使用的端口号,数据库用户等
> vi ~/.bashrc
# the default pg host
PGHOST=localhost
# the default pg port
PGPORT=5432
# the default pg user
PGUSER=postgres
6. 服务设置
上述启动数据库为手动启动,系统重启后不会自动启动,下面方法可以添加postgres服务,并设置开机自启动。
6.1 添加启动服务
切换到root下
su
cp /usr/local/pgsql/contrib/start-scripts/linux /etc/init.d/postgresql
chmod u+x /etc/init.d/postgresql
* 如果初始化多个数据库实例,需要为每个实例准备单独的服务脚本,如/etc/init.d/postgresql1
确认PGDATA与初始化数据库时指定的目录一致
> vi /etc/init.d/postgresql
PGDATA="/usr/local/pgsql/data"
6.2 添加开机自启动
chkconfig --add postgresql
可以通过service控制postgres服务
service postgresql start
service postgresql stop
service postgresql restart
7. 引申配置
一些optional的配置
> vi ~/.bashrc
# used for gdb
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
# alias for multiple db instances
alias psql1='psql -p 5432 -U postgres'
alias psql2='psql -p 5433 -U postgres'
alias psql3='psql -p 5434 -U postgres'
8. Trouble-shooting
1. make时报找不到bison
config前没有安装bison,make时报找不到bison,这时再安装bison再make依旧报错。原因是config时会设置BISON环境变量,make时会使用它,因此如果config时没有安装bison,config后再安装bison,次变量依然为空,make时依旧会报找不到bison。解决方法很简单,安装bison后重新config。
make -C parser gram.h
make[2]: Entering directory '/usr/local/pgsql/src/backend/parser'
'/usr/bin/perl' ./check_keywords.pl gram.y ../../../src/include/parser/kwlist.h
***
ERROR: `bison' is missing on your system. It is needed to create the
file `gram.c'. You can either get bison from a GNU mirror site
or download an official distribution of PostgreSQL, which contains
pre-packaged bison output.
***
2. psql中无法通过上下箭头调用历史命令,也无法编辑历史命令
原因是config时添加了选项--without-readline,详见官方说明
--without-readline
Prevents use of the Readline library (and libedit as well). This option disables command-line editing and history in psql.
./configure --prefix=/usr/local/pgsql --without-readline
8. 参考资料
https://developer.aliyun.com/article/696187
https://www.postgresql.org/docs/current/install-procedure.html
https://www.linuxcool.com/createdb
来源:oschina
链接:https://my.oschina.net/u/4355102/blog/4842010