PostgresSQL如何安装第三方插件?

第三方插件安装

  1. 进入第三方插件源码目录中,定义PATH或者PG_CONFIG环境变量
# 示例,将pg的bin目录export PATH:
export PATH=/data/postgres/13/bin:$PATH
# 或者
export PG_CONFIG=/data/postgres/13/bin/pg_config
  1. 编译安装
gmake && gmake install   

gmake install后会在pg安装目录下的share/postgresql/extension生成.control(插件信息的的控制文件)和.sql文件(插件脚本文件).

  1. 创建插件
-- 超级用户登录pg执行create extension,这一步操作实际就是执行插件sql脚本文件,在库中创建一些对象
create extension xxx;

-- 另外,也可以直接将插件源码sql导入到库中。

有些插件在make install后、create extension之前,需要在postgresql.conf中配置shared_preload_libraries,然后重启实例再创建插件

  1. 通过pg_available_extensions表可查看实例已经安装(make install)的插件,\dx查看已经创建的插件

create extension权限

一般只有具有superuser的用户才能create extension,少数插件不需要superuser权限、只需要database owner就可以创建,例如:plpgsql。这个是由插件的*.control 文件中的superuser (boolean)参数决定(参数默认true,即需要superuser权限)。
由此,是不是把插件的*.control 文件中的superuser (boolean)参数修改为false后,是不是就不需要superuser就能create extension了呢?
还需要以下条件:

  1. 该用户能够执行插件脚本中的所有命令
  2. 脚本文件语言是trusted的(select lanname,lanpltrusted from pg_language; 可以查看language),或者会报错:ERROR:  permission denied for language c 。当然可以修改pg_language.lanpltrusted为't'来更改语言的truste状态,但极其不建议,有安全风险。

备库插件

主库create extension插件,会同步在备库创建;如果某些插件需要额外的库文件(需要配置shared_preload_libraries),则需要在备库手动安装。

参考

# PgSQL · 内核开发 · 如何管理你的 PostgreSQL 插件
PostgreSQL: Documentation: 16: 38.17. Packaging Related Objects into an Extension

posted @ 2024-03-01 16:19  清风生  阅读(1540)  评论(0)    收藏  举报