postgresql源码安装

笑着哭i 提交于 2020-12-26 15:01:27

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

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!