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)

相关推荐
忧郁蓝调262 小时前
Redis不停机数据迁移:基于 redis-shake 的跨实例 / 跨集群同步方案
运维·数据库·redis·阿里云·缓存·云原生·paas
吃螺丝粉2 小时前
zookeeper权限设置
linux·运维·服务器
代码游侠2 小时前
学习笔记——HTML网页开发基础
运维·服务器·开发语言·笔记·学习·html
乾元2 小时前
数据中心流量工程(TE)优化:当 AI 成为解决“维度诅咒”的唯一操纵杆
运维·服务器·网络·人工智能·架构·自动化
代码游侠3 小时前
应用——基于C语言实现的简易Web服务器开发
运维·服务器·c语言·开发语言·笔记·测试工具
幺零九零零3 小时前
Docker底层-IPC Namespace(进程间通信隔离)
运维·docker·容器
一只旭宝3 小时前
Linux专题十三:shell脚本编程
linux·运维·服务器
浅陌sss3 小时前
使用Unity从IIS搭建的文件服务器下载资源时出现HTTP/1.1 404 Not Found
运维·服务器·http
电商API&Tina4 小时前
【电商API接口】多电商平台数据API接入方案(附带实例)
运维·开发语言·数据库·chrome·爬虫·python·jenkins