PostgreSQL中插件如何新增一个配置项

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PostgreSQL中插件如何新增一个配置项

PostgreSQL通过插件可以集成许多扩展,比如auth_delay。添加插件时,会引入一些guc配置变量,比如auth_delayauth_delay.milliseconds。那么这些变量是如何随着插件的安装集成到server中呢?在系统中又是如何管理的呢?

我们先看下guc参数是如何管理的。

首先初始化GUC选项,将其设置为默认值;然后读取命令行配置,最后读取配置文件postgresql.conf中的配置项。


1 初始化默认值


5类参数:ConfigureNamesBoolConfigureNamesIntConfigureNamesRealConfigureNamesRealConfigureNamesEnum

    InitializeGUCOptions
        build_guc_variables();
        InitializeOneGUCOption(guc_variables[i]);
        InitializeGUCOptionsFromEnvironment

    build_guc_variables完成空间申请:循环计算出所有变量个数,申请一个大空间config_generic *guc_vars[]数组,将所有变量值都放到这个数组里面,然后按字母顺序排序。最终将全局变量guc_variables也指向guc_vars数组,变量个数num_guc_variablesguc_variables[]数组大小为当前参数总数的1.25倍,主要方便以后参数的扩充。例如:

     

    InitializeOneGUCOption初始化默认值:循环调用该函数,将所有参数设置为默认值。

    InitializeGUCOptionsFromEnvironment完成环境变量 值的获取:从PGPORTPGDATESTYLEPGCLIENTENCODING中获取,不为空则调用SetConfigOption函数来设置这三个变量对于的参数值。最后检查系统最大安全栈深度。如果这个深度大于100KB并且不超过2MB,则用它设置max_stack_depth参数。


    2 命令行配置GUC参数


    如果启动PG进程时,通过命令行参数指定了一些GUC的参数值,那需要从命令行中将这些参数值解析出来并设置到相应GUC参数中。根据命令行配置主要调用函数getoptSetConfigOption来配置,比如:

     

    3 配置文件读取


    最后调用SelectConfigFiles读取配置文件中值重新配置参数。需要注意,配置文件中设置的参数都不能修改之前通过命令行已经设置的参数,因其优先级没有命令行优先级高


    至此,了解到配置项是如何管理的。接着看下auth_delay插件中如何新增一个变量。


    4 auth_delay新增配置项


     

    该插件在_PG_init函数中新增定义一个GUC变量。上图所示,由函数DefineCustomIntVariable来完成,auth_delay新增的配置项是auth_delay.millisenconds,对应到程序中是auth_delay_milliseconds变量。

     

    主要调用函数init_custom_variabledefine_custom_variableinit_custom_variable函数主要申请一个config_generic空间,并初始化generic域。define_custom_variable函数完成新变量的定义与增加:

     

    该函数会先从guc_variables数组中查询,看有没有已经加载,比如在postgresql.conf中配置了。未配置的的调用InitializeOneGUCOptionadd_guc_variable新增一个变量。它也是先初始化为默认值,然后添加到guc_variables数组中,最后排序。若在postgresql.conf中配置,则将其值重新配置到变量中。

    至此,插件中新定义的配置项及其值加载到了server中。


    相关实践学习
    使用PolarDB和ECS搭建门户网站
    本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
    阿里云数据库产品家族及特性
    阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
    目录
    相关文章
    |
    SQL 自然语言处理 监控
    PostgreSQL插件汇总
    一专多长的数据库——PostgreSQL
    2758 0
    |
    2月前
    |
    XML 关系型数据库 数据库
    使用mybatis-generator插件生成postgresql数据库model、mapper、xml
    使用mybatis-generator插件生成postgresql数据库model、mapper、xml
    141 0
    |
    3月前
    |
    人工智能 自然语言处理 关系型数据库
    |
    3月前
    |
    SQL JSON 关系型数据库
    [UE虚幻引擎插件DTPostgreSQL] PostgreSQL Connector 使用蓝图连接操作 PostgreSQL 数据库说明
    本插件主要是支持在UE蓝图中连接和操作PostgreSQL 数据库。
    45 2
    |
    10月前
    |
    SQL 关系型数据库 Go
    《增强你的PostgreSQL:最佳扩展和插件推荐》
    《增强你的PostgreSQL:最佳扩展和插件推荐》
    723 0
    |
    3月前
    |
    关系型数据库 数据库 PostgreSQL
    Docker【应用 03】给Docker部署的PostgreSQL数据库安装PostGIS插件(安装流程及问题说明)
    Docker【应用 03】给Docker部署的PostgreSQL数据库安装PostGIS插件(安装流程及问题说明)
    260 0
    |
    3月前
    |
    关系型数据库 数据库 PostgreSQL
    PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
    PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
    354 1
    |
    3月前
    |
    SQL 监控 关系型数据库
    postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用
    postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用
    159 0
    |
    3月前
    |
    SQL 监控 关系型数据库
    postgresql|数据库|插件学习(一)---postgresql-12的内置插件pg_stat_statements的启用和使用
    postgresql|数据库|插件学习(一)---postgresql-12的内置插件pg_stat_statements的启用和使用
    123 0
    |
    SQL 存储 自然语言处理
    玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
    在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
    玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词