PostgreSQL 16数据库的yum、编译、docker三种方式安装——筑梦之路

一、 docker方式

docker pull postgres:16.0

docker rm -f lhrpg16

docker run --name lhrpg16 -h lhrpg16 -d -p 54329:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:16.0

docker exec -it lhrpg16 bash

docker exec -it lhrpg16 psql -U postgres -d postgres

select * from pg_tables;
select version();

二、yum方式

dnf install -y cmake make gcc zlib gcc-c++ perl readline readline-devel zlib zlib-devel \
    perl python36 tcl openssl ncurses-devel openldap pam  perl-IPC-Run libicu-devel

dnf install epel-release -y

dnf --enablerepo=powertools install perl-IPC-Run -y

# 自2023年8月起,PostgreSQL RPM repo停止向PostgreSQL RPM repo添加新包,**包括PostgreSQL 16**.我们将维护旧的主要版本,直到每个主要版本被PostgreSQL项目终止。请访问这里每个主要版本的最新发布日期。https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/

wget https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/postgresql16-16.0-1PGDG.rhel8.x86_64.rpm
 
wget https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/postgresql16-server-16.0-1PGDG.rhel8.x86_64.rpm

wget https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/postgresql16-contrib-16.0-1PGDG.rhel8.x86_64.rpm

wget https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/postgis34_16-devel-3.4.0-1PGDG.rhel8.x86_64.rpm
 
wget https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/postgresql16-libs-16.0-1PGDG.rhel8.x86_64.rpm

# 安装

dnf localinstall postgresql16-*

# (建议安装)安装开发包,若后期需要编译一些插件,例如pg_recovery、pg_dirtyread等都需要该包

dnf localinstall postgresql16-devel-16.0-1PGDG.rhel8.x86_64.rpm

rpm -aq| grep postgres

echo "export PATH=/usr/pgsql-16/bin:$PATH" >> /etc/profile

# 初始化

/usr/pgsql-16/bin/postgresql-16-setup initdb

systemctl enable postgresql-16 --now

# 本地登陆

su - postgres

psql

# 安装插件

create extension pageinspect;

create extension pg_stat_statements;

select * from pg_extension;

select * from pg_available_extensions order by name;

# 修改密码

alter user postgres with  password 'lhr'; 或 \password

select * from pg_tables;

select version();

# 配置允许远程登陆

cat >> /var/lib/pgsql/16/data/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5432
unix_socket_directories='/var/lib/pgsql/16/data'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
EOF

cat  << EOF > /var/lib/pgsql/16/data/pg_hba.conf
 # TYPE  DATABASE    USER    ADDRESS       METHOD
 local     all       all                    trust
 host      all       all    ::1/128         trust
 host      all       all   127.0.0.1/32     trust
 host      all       all    0.0.0.0/0        md5
 host   replication  all    0.0.0.0/0        md5
 EOF

systemctl restart postgresql-16

psql -U postgres -h 192.168.100.100 -d postgres -p54327

# 从Postgresql 9.2开始,还可以使用URI格式进行远程连接:psql postgresql://myuser:mypasswd@myhost:5432/mydb

psql postgresql://postgres:lhr@192.168.100.100:54327/postgres

mkdir -p /home/postgres

chown postgres.postgres /home/

sed -i 's|/var/lib/pgsql|/home/postgres|' /etc/passwd

echo "lhr" |passwd --stdin postgres

cat > /home/postgres/.bash_profile <<"EOF"
export PGPORT=54327
export PGHOME=/usr/pgsql-16
export PGDATA=/var/lib/pgsql/16/data
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.UTF-8
export DATE='date +"%Y%m%d%H%M"'
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGPASSWORD=lhr
export PGDATABASE=postgres
export PS1="[\u@\h \W]\$ "
alias ll='ls -l'
EOF


chown postgres.postgres /home/postgres/.bash_profile

三、编译方式

# 下载源码

wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.gz

# 创建用户

groupadd -g 60000 pgsql

useradd -u 60000 -g pgsql pgsql

echo "lhr" | passwd --stdin pgsql

# 创建目录

mkdir -p /postgresql/{pgdata,archive,scripts,backup,pg16,soft}

chown -R pgsql:pgsql /postgresql

chmod -R 775 /postgresql

# 安装依赖包

yum install -y cmake make gcc zlib gcc-c++ perl readline readline-devel zlib zlib-devel 
    perl python36 tcl openssl ncurses-devel openldap pam perl-IPC-Run libicu-devel

# 编译源码

su - pgsql

cd /postgresql/soft

tar zxvf postgresql-16.0.tar.gz

cd postgresql-16.0

./configure --prefix=/postgresql/pg16

make -j 8 && make install

make world -j 8 && make install-world

# 配置环境变量

cat >>  ~/.bash_profile <<"EOF"
export LANG=en_US.UTF-8
export PS1="[\u@\h \W]\$ "
export PGPORT=5432
export PGDATA=/postgresql/pgdata
export PGHOME=/postgresql/pg16
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
export DATE=`date +"%Y%m%d%H%M"`
export MANPATH=$PGHOME/share/man:$MANPATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
EOF

source  ~/.bash_profile

# 初始化数据库

su - pgsql

/postgresql/pg16/bin/initdb -D /postgresql/pgdata -E UTF8 --locale=en_US.utf8 -U postgres --data-checksums

# 调整参数

cat >> /postgresql/pgdata/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5432
unix_socket_directories='/postgresql/pgdata'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
EOF

cat   >> /postgresql/pgdata/pg_hba.conf << EOF
# TYPE  DATABASE    USER    ADDRESS       METHOD
local     all       all                    trust
host      all       all   127.0.0.1/32     trust
host      all       all    0.0.0.0/0        md5
host   replication  all    0.0.0.0/0        md5
EOF

# 启动服务

su - pgsql

pg_ctl start

pg_ctl status

pg_ctl stop


# 修改数据库超管密码

pg_ctl start 

psql

alter user postgres with  password 'lhr';

exit

# 注册服务到systemd

cat > /etc/systemd/system/PG16.service <<"EOF"
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network.target

[Service]
Type=forking
User=pgsql
Group=pgsql
Environment=PGPORT=5432
Environment=PGDATA=/postgresql/pgdata
OOMScoreAdjust=-1000
ExecStart=/postgresql/pg16/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/postgresql/pg16/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/postgresql/pg16/bin/pg_ctl reload -D ${PGDATA} -s
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable PG16 --now
systemctl start PG16
systemctl status PG16

随手一记:生成密码的密文sha256加密

echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1

<think>好的,我现在需要帮助用户在Docker安装pgvector。首先,我得回忆一下pgvector是什么。它是PostgreSQL的一个扩展,用于向量相似性搜索,常用于机器学习和AI应用。用户需要详细的步骤教程或文档,所以得一步步来。 首先,用户提到了Docker,所以应该从创建Dockerfile开始。可能用户需要基于PostgreSQL的官方镜像,然后安装pgvector的依赖项。我记得pgvector需要构建,所以可能需要安装git和build工具。然后克隆仓库,编译安装。 接下来,用户可能需要配置PostgreSQL以加载这个扩展。这涉及到修改postgresql.conf文件,添加shared_preload_libraries参数。然后进入容器,创建数据库,执行CREATE EXTENSION命令。 还要考虑用户可能遇到的常见问题,比如依赖项缺失,或者PostgreSQL版本是否兼容。此外,可能需要指导用户如何验证安装是否成功,比如运行查询检查扩展是否存在。 另外,用户提供的引用中有提到安装Docker的命令,比如使用yum安装,但用户可能已经安装Docker,所以步骤可能需要从创建Dockerfile开始。不过可能需要确认用户是否已经正确安装Docker,如果没有,可能需要指引他们参考引用中的安装步骤,比如引用[2]和引用[3]提到的安装Docker的方法。 最后,确保每一步都清晰,命令正确无误,并且语法正确。比如使用正确的apt-get命令安装依赖,克隆仓库,make命令等。同时,用户需要独立公式的地方可能不多,但如果有数学表达式的话需要正确使用$...$或$$...$$格式。不过在这个问题中可能不需要,但要注意其他要求,比如中文回答,生成相关问题等。 总结步骤应该是: 1. 创建Dockerfile,基于postgres镜像。 2. 安装必要的依赖:git、build-essential、postgresql-server-dev等。 3. 克隆pgvector仓库,编译安装。 4. 配置PostgreSQL以加载扩展。 5. 构建并运行Docker镜像。 6. 进入容器,创建数据库并启用pgvector扩展。 7. 验证安装。 需要检查是否有遗漏的步骤,例如权限问题,或者是否需要初始化数据库。可能还需要在Dockerfile中添加复制配置文件的步骤,或者在启动时执行脚本。另外,考虑用户是否需要在docker-compose中配置,但用户可能只需要基本的Docker步骤,所以保持简单。 最后,生成相关问题,比如如何验证安装,如何优化性能,或者如何在应用中使用pgvector。这些问题应该围绕用户可能的后续需求展开。</think>在Docker安装pgvector需要基于PostgreSQL镜像构建自定义容器,以下是具体步骤: ### 一、创建Dockerfile ```dockerfile FROM postgres:15-alpine # 安装编译依赖项 RUN apk add --no-cache git build-base postgresql-dev # 克隆pgvector仓库并编译安装 RUN git clone https://github.com/pgvector/pgvector.git /tmp/pgvector \ && cd /tmp/pgvector \ && make \ && make install ``` ### 二、配置PostgreSQL容器启动时加载扩展: ```dockerfile # 在Dockerfile末尾添加配置 COPY postgresql.conf /usr/local/share/postgresql/postgresql.conf CMD ["postgres", "-c", "config_file=/usr/local/share/postgresql/postgresql.conf"] ``` 创建配置文件`postgresql.conf`: ```ini shared_preload_libraries = 'vector' ``` ### 三、构建并运行容器 ```bash docker build -t pgvector-postgres . docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword pgvector-postgres ``` ### 四、启用扩展 进入容器执行: ```bash docker exec -it <container_id> psql -U postgres CREATE EXTENSION vector; ``` ### 五、验证安装 ```sql SELECT * FROM pg_extension WHERE extname = 'vector'; ``` [^1]: PostgreSQL官方镜像已包含必要运行环境,但需要手动安装编译工具链[^3]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值