Linux环境下基于Docker安装 PostgreSQL数据库并配置 pgvector

news2025/6/4 1:36:47

文章目录

  • 1 docker-compose 安装 PostgreSQL + 容器内安装 pgvector
    • 1.1 基于 docker-compose 安装 PostgreSQL 数据库
    • 1.2 容器内配置 pgvector
  • 2. docker-compose + Dockerfile 形式直接配置PostgreSQL数据库及 pgvector
  • 参考资料

PostgreSQL是一种功能强大的开源关系数据库管理系统,广泛应用于各种应用程序中。PostgresStore 提供持久化存储功能,支持层次命名空间和可选的向量搜索(通过 pgvector 扩展),适合需要长时记忆的 AI 应用,如聊天机器人或自动化工作流。

  • PostgreSQL 官网:https://www.postgresql.org/
  • pgvector Github项目地址:https://github.com/pgvector/pgvector

1 docker-compose 安装 PostgreSQL + 容器内安装 pgvector

1.1 基于 docker-compose 安装 PostgreSQL 数据库

参考博客:

  • https://github.com/NanGePlus/LangGraphChatBot

下面介绍如何以 docker compose 形式启动PostgreSQL服务。

  1. 安装相关依赖包,推荐使用系统自带的 docker compose
sudo apt-get update
sudo apt-get install docker-compose-plugin  # 新版本

注意: 这里,如果安装的是新版本的 docker-compose-plugin,后续命令为 docker compose (没有中间的横线-)

注意事项:

  1. 不要使用 pip 安装 docker compose,特别是当您使用 Anaconda 环境时。
  2. 使用系统包管理器(apt/yum)安装 docker compose

这里,笔者之前在 Anaconda 的虚拟环境中 使用 pip install docker-compose 就出现了报错,所以大家最好 使用 系统包管理器(apt/yum)来安装 docker-compose

  1. 编写 docker-compose 所需的配置文件。
    这里我们的配置文件为 docker-compose.yaml,文件内容为:
services:
  postgres:
    image: postgres:15        # 指定具体版本
    container_name: postgres_db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
      TZ: Asia/Shanghai       # 设置时区
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:             # 健康检查
      test: ["CMD", "pg_isready", "-U", "nange"]
      interval: 10s
      timeout: 5s
      retries: 5
    command: ["postgres", "-c", "max_connections=200"]  # 自定义配置

volumes:
  pgdata:

这里,我们配置的容器名称为 postgres_db

  1. 运行下面命令启动PostgreSQL数据库服务:
sudo docker compose up -d

这个命令会:

  • 以后台模式 (-d) 启动所有定义的服务
  • 如果本地有 postgres:15 镜像,则直接加载使用。若没有 postgres:15 镜像,会自动从镜像仓库拉取。
  • 创建名为 pgdata 的持久化卷
  • 启动容器并应用所有配置

运行成功的话会出现如下界面:
在这里插入图片描述

  1. 检查容器是否正常运行:
docker compose ps

或查看所有容器状态:

docker ps
  1. 连接数据库

您可以通过以下方式连接数据库:

方式一:在容器内使用 psql

docker compose exec postgres psql -U postgres

方式二:从外部客户端连接

使用任何 PostgreSQL 客户端工具连接,如Navicat可视化工具。
在这里插入图片描述

  1. 停止服务(当需要时)
docker compose down

如果要同时删除数据卷(慎用,会删除所有数据):

docker compose down --volumes

1.2 容器内配置 pgvector

在容器中按照如下步骤进行操作。

  1. 进入容器:
docker exec -it postgres_db bash
  1. 容器内安装依赖
apt update
apt install -y git build-essential postgresql-server-dev-15

这里,笔者运行时出现报错:

W: Failed to fetch http://deb.debian.org/debian/dists/bookworm/InRelease  Could not connect to debian.map.fastlydns.net:80 (151.101.90.132)

W: Failed to fetch http://apt.postgresql.org/pub/repos/apt/dists/bookworm-pgdg/InRelease  Could not connect to apt.postgresql.org:80 (151.101.91.52), connection timed out

需要检查下服务器是否开通了 http://deb.debian.orghttp://apt.postgresql.org 的访问权限。如果没有权限,可以申请开通,或者使用国内清华或阿里云的镜像源。

  1. 容器内编译并安装 pgvector

这里主要参考 pgvector 官网:https://github.com/pgvector/pgvector

cd /tmp
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
make install
  1. 检查扩展文件是否安装成功
ls -l /usr/share/postgresql/15/extension/vector*
  1. 启用pgvector扩展
psql -U postgres -d mydatabase
-- 在psql中执行
CREATE EXTENSION vector;
  1. 验证安装

基于SQL语句验证:

SELECT * FROM pg_extension WHERE extname = 'vector';

2. docker-compose + Dockerfile 形式直接配置PostgreSQL数据库及 pgvector

参考博客:

  • docker-compose安装pgsql和pgvector
  • 2-PostgreSQL docker compose 安装教程-Pgvector
  1. 创建 Dockerfile
# 使用 PostgreSQL 15 基础镜像
FROM postgres:15

# 安装 pgvector
RUN apt-get update && \
    apt-get install -y postgresql-16-pgvector && \
    rm -rf /var/lib/apt/lists/*

# 设置启动命令
CMD ["postgres"]

  1. 创建 docker-compose.yaml
services:
  postgres:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: postgres_db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
      TZ: Asia/Shanghai       # 设置时区
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always
    healthcheck:             # 健康检查
      test: ["CMD", "pg_isready", "-U", "nange"]
      interval: 10s
      timeout: 5s
      retries: 5
    command: ["postgres", "-c", "max_connections=200"]  # 自定义配置

volumes:
  pgdata:
  1. 构建Dockerfile
docker compose build
  1. 运行
docker compose up -d
  1. 进入postgres容器
docker exec -it postgres psql -U postgres -d postgres
  1. 判断vector工具是否安装成功
CREATE EXTENSION IF NOT EXISTS vector;

参考资料

  • https://github.com/NanGePlus/LangGraphChatBot
  • docker-compose安装pgsql和pgvector
  • 2-PostgreSQL docker compose 安装教程-Pgvector

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2386609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(9)-java+ selenium->元素定位之By name

1.简介 上一篇已经介绍了通过id来定位元素,继续介绍其他剩下的七种定位方法中的通过name来定位元素。本文来介绍Webdriver中元素定位方法之By name,顾名思义,就是我们想要定位的目标元素节点上,有一个name ="value"的属性,这样我们就可以通过name的value直接去…

深浅拷贝?

一、定义: 浅拷贝:只复制对象的第一层属性,若第一层属性是引用类型(如对象、数组),则复制其内存地址,修改拷贝后的嵌套对象会影响原对象。 深拷贝:递归复制对象的所有层级&#xf…

Beckhoff PLC 功能块 FB_CTRL_ACTUAL_VALUE_FILTER (模拟量滤波)

1. 功能块概览 名称:FB_CTRL_ACTUAL_VALUE_FILTER(实际值滤波控制功能块)。作用:对测量输入值进行合理性检查( plausibility check )和滤波处理,防止异常跳变(如传感器信号突变&…

【C++指南】string(四):编码

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 引言 在 C 编程中,处理字符串是一项极为常见的任务。而理解字符串在底层是如何编码存储的&…

深度学习之序列建模的核心技术:LSTM架构深度解析与优化策略

LSTM深度解析 一、引言 在深度学习领域,循环神经网络(RNN)在处理序列数据方面具有独特的优势,例如语音识别、自然语言处理等任务。然而,传统的 RNN 在处理长序列数据时面临着严重的梯度消失问题,这使得网…

AI量化交易是什么?它是如何重塑金融世界的?

第一章:证券交易的进化之路 1.1 从喊价到代码:交易方式的革命性转变 在电子交易普及之前,证券交易依赖于交易所内的公开喊价系统。交易员通过手势、喊话甚至身体语言传递买卖信息,这种模式虽然直观,但效率低下且容易…

分布式事务处理方案

1. 使用Seata框架解决 1.1 XA 事务 1.1.1 XA整体流程 第一阶段 RM1开启XA事务-> 执行业务SQL -> 上报TC执行结果RM2开启XA事务-> 执行业务SQL -> 上报TC执行结果 第二阶段 TC根据 RM上报结果通知RM一起提交/回滚XA事务 1.1.2 XA特点 XA 模式必须要有数据库的支…

CVE-2024-36467 Zabbix权限提升

漏洞描述 在Zabbix中,具有API访问权限的已认证用户(例如具有默认用户角色的用户)可以通过调用user.update API接口,将自己添加到任何用户组(如Zabbix管理员组)。然而,用户无法添加到已被禁用或…

Dify中的自定义模型插件开发例子:以xinference为例

本文使用Dify v1.0.0-beta.1版本。模型插件结构基本是模型供应商(模型公司,比如siliconflow、xinference)- 模型分类(模型类型,比如llm、rerank、speech2text、text_embedding、tts)- 具体模型(…

尚硅谷redis7 33-36 redis持久化之RDB优缺点及数据丢失案例

官网说明优点: RDB是Redis数据的一个非常紧凑的单文件时间点表示,RDB文件非常适合备份。例如,您可能希望在最近的24小时内每小时旧档一次RDB文件,并在30天内每天保存一个RDB快照,这使您可以在发生来难时轻松恢复不同版本的数据集。RDB非常适合灾难恢复,它是一个可以…

计算机网络-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx

文章目录 WebSocketDNS什么是dns域名解析底层协议 cookie/sessionToken/JWTNginx WebSocket 一种网络通信协议,允许在单个 TCP(半双工) 连接上进行全双工通信(客户端和服务器可同时双向传输数据)。 HTTP是基于请求-响…

将网页带格式转化为PDF

# 一、安装插件 SingleFile | 将完整的页面保存到一个 HTML 文件中 – 下载 🦊 Firefox 扩展(zh-CN) 打开火狐浏览器,安装上面的插件 # 二、下载html单文件 打开对应的网页,点击插件下载对应的html文件 # 三、打开…

【ArcGIS】ArcGIS AI 助手----复现

github地址 korporalK/Archer-GIS-AI-Assitant:Archer 在 ArcGIS Pro 中将自然语言命令转换为自动化 GIS 工作流。它使用代理框架(计划-验证-执行)构建并由 LLM 提供支持,可简化空间分析、减少手动工作并使 GIS 更易于访问。Arch…

充电枪IEC62196/EN 62196测试内容

充电枪IEC62196/EN 62196测试内容 一、机械性能测试 插拔力测试 交流充电接口的插入/拔出力需≤100N,直流接口≤140N。若使用助力装置,操作力仍需满足上述要求。 测试方法:通过弹簧秤或专用试验机(如Sun-CB设备)测…

SAP ERP 系统拆分的七大挑战

在企业变革或管理运营风险时,剥离IT系统能带来显著效益,但SAP ERP系统的复杂性使得这项工作充满挑战。如果管理不当,可能会导致数据不一致、运营中断、合规风险和意外成本。由于SAP ERP系统深度集成于企业核心业务流程中,其拆分工…

AcrelEMS 3.0智慧能源管理平台:构建企业微电网数智化中枢

安科瑞电气顾强 在"双碳"目标驱动下,企业能源管理正从粗放式运营向精细化、智能化转型。AcrelEMS 3.0智慧能源管理平台以微电网为核心载体,通过"感知-分析-决策-控制"的全链路数字化能力,助力工商企业、医疗机构、教育机…

Word转PDF--自动生成目录

1-Word文档中已经包含自动生成的目录; 2-选择“文件”; 3-另存为,PDF; 4-选择“选项”按钮,在弹出的窗口中,勾选“创建书签时使用标题”。

轻量级视觉语言模型 Dolphin:高效精准的文档结构化解析利器

在数字化办公和学术研究日益普及的今天,如何高效、准确地处理各类文档图像成为了一个亟需解决的问题。Dolphin 应运而生,作为一款基于异构锚点提示的多模态文档图像解析模型,它不仅打破了传统手动整理文档的繁琐流程,更以远超主流…

如何安全配置数据库(MySQL/PostgreSQL/MongoDB)

数据库是许多应用程序的核心组成部分,因此保护数据库的安全性至关重要。无论是MySQL、PostgreSQL还是MongoDB,都需要经过适当的安全配置才能防止潜在的安全威胁。本文将介绍如何安全配置这些流行的数据库管理系统,以确保数据的保密性、完整性…

将 Docker 镜像从服务器A迁移到服务器B的方法

在日常工作中,我们有时会需要将服务器 A上的镜像上传至服务器B上,下面给出具体操作方式,以镜像 postgres:15 为例进行讲解。 首先在服务器A上拉取 镜像 postgres:15 ,命令如下: docker pull postgres:15下面再将服务…