Patroni生成postgresql.conf中的参数时,不是简单地将patroni.yml里postgresql下的参数直接转为postgresql.conf 里的参数的,而是会做一下校验,校验参数是否存在、范围。
校验代码位于:patroni/postgresql/validator.py
生成 postgresql.conf 的代码位于 patroni/postgresql/config.py 其中会调用 transform_postgresql_parameter_value() 和 transform_recovery_parameter_value() 对patroni.yml 里的参数进行校验,符合版本,范围,并且validator.py中存在的参数,才能被写进postgresql.conf。
对于Opengauss这其实带来一些麻烦,因为Opengauss有许多参数是PG(validator.py)没有的,为了能让这些参数出现在postgersql.conf中,必须在validator.py加入相应的条目,很麻烦,我的解决办法是生成postgersql.conf时不调用transform_postgresql_parameter_value() 和 transform_recovery_parameter_value(),这样无论patroni.yml的postgresql参数区新增什么参数,都会原封不动的出现在postgresql.conf中。
patroni/postgresql/validator.py不做修改,只是不再调用其中的函数,这个文件在opengauss中就算废弃了,在patroni/postgresql/config.py 中注释掉对transform_postgresql_parameter_value() 和 transform_recovery_parameter_value()的调用,代码修改如下:
ConfigHandler.write_postgresql_conf()中:
ConfigHandler._write_recovery_params()和ConfigHandler.write_recovery_conf()中: