适用范围
mogdb(3.0.0)中创建函数或者存储过程报错
问题概述
下图表明客户端的基本功能都正常

但是在客户端创建函数或者存储过程时报错autonomous transaction failed to create autonomous session:

问题原因
在创建函数或者存储过程时,会自动创建一个自治事务,这个自治事务的本质就是服务端通过localhost(127.0.0.1)建立一个与数据库服务端的无密码连接,如果此时localhost(127.0.0.1)无法正常连接到服务端(192.168.57.130),那么就会报错。
一般而言对于localhost本地连接,pg_hba.conf白名单文件中默认设置为完全放开的可无密码直连的方式

在这种情况下,localhost已经配置了白名单但仍然无法连接数据库那么问题就指向了listen_addresses这个监听参数的设置上,该参数的作用是用于指定数据库服务器监听的IP地址或主机名,它决定了哪些网络接口上的连接请求将被数据库服务器接受,这是数据库连接的第一道关卡,只有配置了客户端ip,连接请求才能被数据库捕捉,再进一步根据pg_hba文件去判定该ip可以访问数据库的哪些database以及哪种身份验证方法进行连接。

解决方案
查看当前listen_addresses的值,可以看到数据库只配置了192.168.57.130(服务端)的监听而没有配置localhost(回环地址127.0.0.1)的监听

将该参数修改为’*’,或者加上localhost,重启数据库即可
gs_guc reload -N all -I all -c "listen_addresses='192.168.57.130,localhost'
再次创建函数:

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




