docker安装pgvector、age和postgis

1. docker-compose.yaml

yaml 复制代码
services:
  postgres:
    image: postgis/postgis:14-3.5  # 使用 PostgreSQL 14 版本
    container_name: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: postgres
    ports:
      - "55432:5432"
    volumes:
      - ./dms/postgres_data/:/var/lib/postgresql/
    networks:
      - pg_network

  pgvector:
    image: pgvector/pgvector:0.8.1-pg14-trixie  # 使用 pgvector 容器
    container_name: pgvector
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: postgres
    networks:
      - pg_network
    ports:
      - "55433:5432"  # 映射 pgvector 的 5432 端口到外部端口 55434
    volumes:
      - ./dms/pgvector_data/:/var/lib/postgresql/

  age:
    image: apache/age:dev_snapshot_PG18  # 使用 Apache AGE 扩展
    container_name: age
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: postgres
    networks:
      - pg_network
    ports:
      - "55434:5432"  # 映射容器的 5432 端口到外部端口 55435
    volumes:
      - ./dms/age_data:/var/lib/postgresql  # 数据持久化到本地目录

networks:
  pg_network:
    driver: bridge

2. 扩展信息说明

这三个扩展分别是 PostGIS, pgvectorApache AGE,它们提供了不同类型的扩展功能,可以使 PostgreSQL 数据库具有额外的能力。下面是每个扩展的简要介绍:

2.1. PostGIS

PostGIS 是 PostgreSQL 的地理空间扩展,它使得 PostgreSQL 能够支持地理空间数据类型,诸如点、线、多边形等,并提供了丰富的空间查询功能。PostGIS 使得 PostgreSQL 成为一个强大的地理信息系统(GIS)数据库。它能够存储、查询和分析地理空间数据,并支持如空间索引、空间查询、几何数据的计算等高级功能。

主要功能:

  • 空间数据类型:支持点、线、多边形等地理空间数据类型。
  • 空间索引:使用 GiST 索引来加速空间查询。
  • 空间分析:支持几何运算,如缓冲区分析、交集、合并等。
  • 与其他 GIS 工具集成:可以与 QGIS、ArcGIS 等 GIS 工具协作。

典型用途:

  • 地理信息系统(GIS)应用。
  • 实时位置跟踪、地图渲染。
  • 轨迹分析、路径计算、地理数据存储与处理。

2.2. pgvector

pgvector 是一个向 PostgreSQL 提供向量支持的扩展,它允许你在 PostgreSQL 中存储和查询向量数据。这对于机器学习、推荐系统、相似度搜索等应用特别有用。向量数据通常用于表示嵌入(embeddings),例如文本、图像或音频的特征表示。

主要功能:

  • 向量存储:支持存储任意维度的浮动向量(通常用于机器学习中的嵌入向量)。
  • 相似度查询:支持快速计算向量之间的相似度(如余弦相似度、欧几里得距离)。
  • 索引支持:通过内置的索引优化向量的相似度查询,使其更加高效。

典型用途:

  • 推荐系统:如根据用户历史行为推荐产品。
  • 文本搜索:通过文本嵌入进行内容的相似度查询。
  • 图像检索:通过图像的特征向量进行相似图像搜索。

2.3. Apache AGE (A Graph Extension for PostgreSQL)

Apache AGE(A Graph Extension for PostgreSQL)是一个为 PostgreSQL 提供图数据库支持的扩展。AGE 允许用户在 PostgreSQL 中使用图数据模型和图算法,这使得 PostgreSQL 除了关系数据库之外,还可以用于图数据库应用。AGE 提供了与图操作相关的查询语言(类似于 SQL 的图查询语言),并支持图分析操作。

主要功能:

  • 图数据模型:支持图的基本操作,如节点、边以及它们之间的关系。
  • 查询图数据:支持图数据库查询语言,允许对图数据执行各种复杂的查询操作(如路径查找、邻接查询等)。
  • 图算法:内置了多种图分析算法,如最短路径、PageRank、图遍历等。
  • 高效查询:能够高效处理大规模图数据,并通过图索引优化查询性能。

典型用途:

  • 社交网络分析:例如分析用户之间的关系、推荐好友、社区检测等。
  • 路径搜索:如在地图或网络中计算最短路径。
  • 知识图谱:构建基于图的数据模型来表示和查询复杂的实体关系。

3. 简单使用扩展

3.1. PostGIS 扩展

3.1.1. 查询sql

如何创建 PostGIS 扩展

在 PostgreSQL 中,可以通过以下 SQL 命令创建 PostGIS 扩展:

sql 复制代码
CREATE EXTENSION postgis;
如何判断 PostGIS 扩展是否存在

可以通过查询 pg_extension 系统表来检查 PostGIS 扩展是否已安装:

sql 复制代码
SELECT * FROM pg_extension WHERE extname = 'postgis';
查询 PostGIS 版本信息

要查询 PostGIS 的版本信息,可以使用以下 SQL:

sql 复制代码
SELECT PostGIS_full_version();

这将返回 PostGIS 的完整版本信息,包括其组件(如 GEOS、PROJ、LIBXML 等)的版本。

3.1.2. 命令查询

sql 复制代码
root@xiaocai:/data/docker/postgres/dms/age_data# docker exec -it postgres psql -U postgres -d postgres -c "SELECT * FROM pg_extension WHERE extname = 'postgis';"








  oid  | extname | extowner | extnamespace | extrelocatable | extversion | extconfig |           extcondition            
-------+---------+----------+--------------+----------------+------------+-----------+-----------------------------------
 18047 | postgis |       10 |         2200 | f              | 3.5.2      | {18368}   | {"WHERE NOT (                    +
       |         |          |              |                |            |           | srid BETWEEN 2000 AND 2217       +
       |         |          |              |                |            |           | OR srid BETWEEN 2219 AND 2220    +
       |         |          |              |                |            |           | OR srid BETWEEN 2222 AND 2292    +
       |         |          |              |                |            |           | OR srid BETWEEN 2294 AND 2295    +
       |         |          |              |                |            |           | OR srid BETWEEN 2308 AND 2962    +
       |         |          |              |                |            |           | OR srid BETWEEN 2964 AND 2973    +
       |         |          |              |                |            |           | OR srid BETWEEN 2975 AND 2984    +
       |         |          |              |                |            |           | OR srid BETWEEN 2987 AND 3051    +
       |         |          |              |                |            |           | OR srid BETWEEN 3054 AND 3138    +
       |         |          |              |                |            |           | OR srid BETWEEN 3140 AND 3143    +
       |         |          |              |                |            |           | OR srid BETWEEN 3146 AND 3172    +
       |         |          |              |                |            |           | OR srid BETWEEN 3174 AND 3791    +
       |         |          |              |                |            |           | OR srid BETWEEN 3793 AND 3802    +
       |         |          |              |                |            |           | OR srid = 3812                   +
       |         |          |              |                |            |           | OR srid BETWEEN 3814 AND 3816    +
       |         |          |              |                |            |           | OR srid = 3819                   +
       |         |          |              |                |            |           | OR srid BETWEEN 3821 AND 3829    +
       |         |          |              |                |            |           | OR srid BETWEEN 3832 AND 3852    +
       |         |          |              |                |            |           | OR srid = 3854                   +
       |         |          |              |                |            |           | OR srid = 3857                   +
       |         |          |              |                |            |           | OR srid BETWEEN 3873 AND 3885    +
       |         |          |              |                |            |           | OR srid BETWEEN 3887 AND 3893    +
       |         |          |              |                |            |           | OR srid BETWEEN 3901 AND 3903    +
       |         |          |              |                |            |           | OR srid BETWEEN 3906 AND 3912    +
       |         |          |              |                |            |           | OR srid = 3920                   +
       |         |          |              |                |            |           | OR srid BETWEEN 3942 AND 3950    +
       |         |          |              |                |            |           | OR srid BETWEEN 3968 AND 3970    +
       |         |          |              |                |            |           | OR srid BETWEEN 3973 AND 3976    +
       |         |          |              |                |            |           | OR srid BETWEEN 3978 AND 3979    +
       |         |          |              |                |            |           | OR srid BETWEEN 3985 AND 3989    +
       |         |          |              |                |            |           | OR srid BETWEEN 3991 AND 3997    +
       |         |          |              |                |            |           | OR srid BETWEEN 4000 AND 4063    +
       |         |          |              |                |            |           | OR srid = 4071                   +
       |         |          |              |                |            |           | OR srid BETWEEN 4073 AND 4075    +
       |         |          |              |                |            |           | OR srid BETWEEN 4079 AND 4083    +
       |         |          |              |                |            |           | OR srid BETWEEN 4087 AND 4088    +
       |         |          |              |                |            |           | OR srid BETWEEN 4093 AND 4100    +
       |         |          |              |                |            |           | OR srid BETWEEN 4120 AND 4176    +
       |         |          |              |                |            |           | OR srid BETWEEN 4178 AND 4185    +
       |         |          |              |                |            |           | OR srid BETWEEN 4188 AND 4289    +
       |         |          |              |                |            |           | OR srid BETWEEN 4291 AND 4319    +
       |         |          |              |                |            |           | OR srid = 4322                   +
       |         |          |              |                |            |           | OR srid = 4324                   +
       |         |          |              |                |            |           | OR srid BETWEEN 4326 AND 4415    +
       |         |          |              |                |            |           | OR srid BETWEEN 4417 AND 4434    +
       |         |          |              |                |            |           | OR srid BETWEEN 4437 AND 4439    +
       |         |          |              |                |            |           | OR srid BETWEEN 4455 AND 4457    +
       |         |          |              |                |            |           | OR srid BETWEEN 4462 AND 4463    +
       |         |          |              |                |            |           | OR srid BETWEEN 4465 AND 4475    +
       |         |          |              |                |            |           | OR srid BETWEEN 4479 AND 4559    +
       |         |          |              |                |            |           | OR srid BETWEEN 4568 AND 4589    +
       |         |          |              |                |            |           | OR srid BETWEEN 4600 AND 4647    +
       |         |          |              |                |            |           | OR srid BETWEEN 4652 AND 4824    +
       |         |          |              |                |            |           | OR srid = 4826                   +
       |         |          |              |                |            |           | OR srid = 4839                   +
       |         |          |              |                |            |           | OR srid BETWEEN 4855 AND 4880    +
       |         |          |              |                |            |           | OR srid BETWEEN 4882 AND 4904    +
       |         |          |              |                |            |           | OR srid BETWEEN 4906 AND 4999    +
       |         |          |              |                |            |           | OR srid BETWEEN 5011 AND 5016    +
       |         |          |              |                |            |           | OR srid = 5018                   +
       |         |          |              |                |            |           | OR srid BETWEEN 5041 AND 5042    +
       |         |          |              |                |            |           | OR srid = 5048                   +
       |         |          |              |                |            |           | OR srid BETWEEN 5069 AND 5072    +

root@xiaocai:/data/docker/postgres/dms/age_data#  docker exec -it postgres psql -U postgres -d postgres -c "SELECT PostGIS_full_version();"
                                                                                                                                                          postgis_full_version                                                                                                                                                          
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POSTGIS="3.5.2 dea6d0a" [EXTENSION] PGSQL="140" GEOS="3.9.0-CAPI-1.16.2" PROJ="7.2.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db" (compiled against PROJ 7.2.1) LIBXML="2.9.10" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)" TOPOLOGY
(1 row)

3.2. pgvector 扩展

3.2.1. 查询sql

如何创建 pgvector 扩展

首先确保已安装 pgvector 扩展,然后执行以下命令创建扩展:

sql 复制代码
CREATE EXTENSION vector;
如何判断 pgvector 扩展是否存在

类似于检查 PostGIS 扩展,可以查询 pg_extension 表来检查 pgvector 扩展是否已安装:

sql 复制代码
SELECT * FROM pg_extension WHERE extname = 'vector';
查询 pgvector 版本信息

pgvector 的版本信息可以通过以下命令来查询:

sql 复制代码
SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';

如果 pgvector 已正确安装,它将返回版本信息。

3.2.2. 命令查询

sql 复制代码
root@xiaocai:/data/docker/postgres/dms/age_data# docker exec -it pgvector psql -U postgres -d postgres -c "SELECT * FROM pg_extension WHERE extname = 'vector';"
  oid  | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
-------+---------+----------+--------------+----------------+------------+-----------+--------------
 16384 | vector  |       10 |         2200 | t              | 0.8.1      |           | 
(1 row)

root@xiaocai:/data/docker/postgres/dms/age_data# docker exec -it pgvector psql -U postgres -d postgres -c "SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';"
 extname | extversion 
---------+------------
 vector  | 0.8.1
(1 row)

3.3 Apache AGE 扩展

3.3.1. 查询sql

如何创建 Apache AGE 扩展

首先确保已安装 AGE 扩展,然后可以执行以下命令来创建扩展:

sql 复制代码
CREATE EXTENSION age;
如何判断 Apache AGE 扩展是否存在

可以通过查询 pg_extension 系统表来检查 AGE 扩展是否已安装:

sql 复制代码
SELECT * FROM pg_extension WHERE extname = 'age';
查询 Apache AGE 版本信息

要查询 Apache AGE 的版本信息,可以使用以下 SQL:

sql 复制代码
SELECT extname, extversion FROM pg_extension WHERE extname = 'age';

这将返回 Apache AGE 的版本信息。

3.3.2. 命令查询

sql 复制代码
root@xiaocai:/data/docker/postgres/dms/age_data# docker exec -it age psql -U postgres -d postgres -c "SELECT * FROM pg_extension WHERE extname = 'age';"
  oid  | extname | extowner | extnamespace | extrelocatable | extversion |   extconfig   | extcondition 
-------+---------+----------+--------------+----------------+------------+---------------+--------------
 16385 | age     |       10 |        16384 | f              | 1.6.0      | {16386,16403} | {"",""}
(1 row)

root@xiaocai:/data/docker/postgres/dms/age_data# docker exec -it age psql -U postgres -d postgres -c "SELECT extname, extversion FROM pg_extension WHERE extname = 'age';"
 extname | extversion 
---------+------------
 age     | 1.6.0
(1 row)

相关推荐
XIAOHEZIcode18 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化