在 Ubuntu 上安装 PostgreSQL 扩展的实用步骤
一 准备与系统级安装
- 更新索引并安装常用包:多数内置扩展随 postgresql-contrib 提供;编译第三方扩展需要 postgresql-server-dev-<版本>(或 postgresql-server-dev-all)。示例(请按实际版本替换 <版本>):
- sudo apt update
- sudo apt install postgresql postgresql-contrib postgresql-server-dev-<版本>
- 确认服务运行:sudo systemctl status postgresql
- 说明:部分扩展(如 pgcrypto、hstore、fuzzystrmatch、isn 等)在老版本中位于 /usr/share/postgresql/<版本>/contrib/ 目录,供脚本方式安装;新版本更推荐用 CREATE EXTENSION。
二 在数据库中创建扩展
- 连接目标库:psql -U <用户名> -d <数据库名>
- 常用 SQL:
- 查看可用扩展:SELECT * FROM pg_available_extensions;
- 查看已安装扩展:SELECT * FROM pg_extension; 或在 psql 中 \dx
- 创建扩展(示例):CREATE EXTENSION hstore;
- 指定安装到某模式:CREATE EXTENSION IF NOT EXISTS hstore SCHEMA myschema;
- 权限要求:通常需要数据库超级用户或具备相应权限的角色执行 CREATE EXTENSION。
三 常见扩展的安装方式速查
| 扩展 |
安装方式 |
备注 |
| hstore |
APT 安装 contrib 后,在库中执行:CREATE EXTENSION hstore; |
键值对存储 |
| pgcrypto |
APT 安装 contrib 后,在库中执行:CREATE EXTENSION pgcrypto; |
加密函数与类型 |
| fuzzystrmatch |
APT 安装 contrib 后,在库中执行:CREATE EXTENSION fuzzystrmatch; |
字符串相似度与音近算法 |
| isn |
APT 安装 contrib 后,在库中执行:CREATE EXTENSION isn; |
ISBN/ISMN/ISSN/UPC 等标准编号类型 |
| pgvector |
源码编译安装后,在库中执行:CREATE EXTENSION vector; |
向量类型与相似度检索 |
| PostGIS |
通过 APT 安装 postgresql-<版本>-postgis-<版本> 后,在库中执行:CREATE EXTENSION postgis; |
地理空间对象与空间函数 |
| 说明:上表中 contrib 提供的扩展(如 hstore、pgcrypto、fuzzystrmatch、isn)在 Ubuntu 上通常随 postgresql-contrib 提供;pgvector 需编译安装;PostGIS 为官方扩展包,名称含版本号。 |
|
|
四 源码编译安装第三方扩展通用步骤
- 安装编译依赖与服务器开发包:sudo apt install build-essential cmake <其他依赖> postgresql-server-dev-<版本>
- 获取源码并编译安装(以 pgvector v0.7.0 为例):
- wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.7.0.tar.gz
- tar -xvzf v0.7.0.tar.gz && cd pgvector-0.7.0
- make -j$(nproc) && sudo make install
- 在数据库中创建扩展:psql -U postgres -d <数据库名> -c “CREATE EXTENSION vector;”
- 验证:\dx 或 SELECT * FROM pg_extension WHERE extname = ‘vector’;
五 需要预加载的扩展与排错要点
- 预加载类扩展(需在 postgresql.conf 设置 shared_preload_libraries 并重启):例如 pg_duckdb 要求 shared_preload_libraries = ‘pg_duckdb’,然后 CREATE EXTENSION pg_duckdb;
- 老版本脚本方式:早期扩展可用 psql -d <库名> -f <模块>.sql 方式执行(如 chkpass.sql、fuzzystrmatch.sql、isn.sql、hstore.sql),现代环境优先 CREATE EXTENSION。
- 权限与版本:CREATE EXTENSION 通常需要超级用户;扩展需与当前 PostgreSQL 主版本匹配;部分云托管环境可能启用扩展白名单,仅允许特定扩展安装。