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, pgvector 和 Apache 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)