内核参数
cat <<'EOF' | sudo tee /etc/sysctl.d/postgresql.conf >> /dev/null
# 表示内核所允许的最大共享内存段的大小。推荐设置物理内存的一半
kernel.shmmax = 4294967296
# 共享内存的个数。推荐值:物理内存 / 页大小,查看页大小命令(getconf PAGE_SIZE)
kernel.shmall = 2097152
# Hugepage个数,推荐值:kernel.shmmax / Hugepagesize;查看Hugepagesize(grep Hugepage /proc/meminfo)
vm.nr_hugepages = 1024
EOF
sudo sysctl -p /etc/sysctl.d/postgresql.conf
安装编译依赖
Ubuntu
sudo apt install -y gcc make pkg-config liblz4-dev zlib1g-dev libssl-dev
下载postgresql源码
wget https://ftp.postgresql.org/pub/source/v14.10/postgresql-14.10.tar.gz
tar xf postgresql-14.10.tar.gz
cd postgresql-14.10
配置编译参数
./configure --prefix=/app/postgresql --with-openssl --without-readline --with-lz4 --with-blocksize=8 --with-wal-blocksize=8
编译以及安装
# 编译
make
# 安装
sudo make install
创建运行用户
sudo useradd -m -s /bin/bash postgres
sudo passwd postgres
创建存储目录
sudo mkdir -p /data/{pg_data,pg_wal}
sudo chown -R postgres. /data/{pg_data,pg_wal}
sudo chmod 700 /data/{pg_data,pg_wal}
设置环境变量
su - postgres
cat <<'EOF' | tee -a ~/.bashrc >>/dev/null
# Postgresql Service Environment variable
export PGHOME=/app/postgresql
export PGDATA=/data/pg_data/
export LD_LIBRARY=$PGHOME/lib
export PATH=$PATH:$PGHOME/bin
EOF
初始化数据库
su - postgres
initdb --pgdata=/data/pg_data --waldir=/data/pg_wal --encoding=UTF8 --locale=en_US.utf8 --auth=scram-sha-256 --username=postgres --pwprompt
- 初始化报错
initdb: error: invalid locale name "en_US.utf8"
Ubuntu
解决办法:安装 language-pack-en
包
- 初始化报错
initdb: error: invalid locale name "zh_CN.utf8"
Ubuntu
解决办法:安装 language-pack-kde-zh-hans
包
启动服务
pg_ctl start