最近公司业务需要,将数据库postgresql升级到了15版本,原来使用的UniDAC版本是8,发现连接不上数据库了。于是升级了UniDAC版本到9.4版。不管是设计期,还是运行期,都还是无法连接上PostgreSql 15(一下简称PG15),真是不知道问题出在哪里;
1,连接数据库参数设置
后来经过同事的帮忙,发现是参数的问题,只需要修改一个SSLMode就可以连接上了;而且并不需要升级UniDac的版本;参数修改成如下图:
如果是运行期动态连接数据库,需要增加如下一行代码:
UniConnection.SpecificOptions.Values['SSLMode'] := 'smAllow';
2,WINDOW环境,缺少DLL的解决办法
如果运行时连接数据库,出现以下报错信息:
OpenSSL client library couldn''t be loaded. Please place libeay32.dll and ssleay32.dll (or libssl32.dll) to system folder (included to PATH) or to the folder with executable unit of main program.
意思是:缺少libeay32.dll文件,需要将libeay32.dll文件加到系统环境变量,或者是将libeay32.dll文件放到运行程序的指定目录;
解决办法:需要将libeay32.dll 和 ssleay32.dll文件(注意对应的Target Platforms,.dll版本也不一样),放到系统文件夹(包含在PATH中)或带有主程序可执行单元的文件夹中,
可以是Win32\Debug或者Win64\Debug目录中
3,Linux环境,缺少DLL的解决办法
如果是Linux下连接PG15数据库,遇到如下错误提示:
'OpenSSL client library couldn'''t be loaded. Please place libssl.so file to system folder (included to LD_LIBRARY_PATH) or to the folder with executable unit of main program.'#015#012'libssl.so: 无法打开共享对象文件: 没有那个文件或目录'
只需要在Linux系统中升级一下OpenSSL,再将libssl.so配置到环境变量里面即可;
我使用的CentOS 7 – 64虚拟系统;
安装OpenSSL
[root@localhost ~]# sudo yum install openssl-devel
将libssl.so配置到环境变量里,并且最好加到配置文件里面,这样长期有效
[root@localhost ~]# echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/libssl.so >> /etc/profile
[root@localhost ~]# source /etc/profile
如果profile文件中,添加的环境变量路径有:,需要去掉,如下图:
4,需要的不同版本的OpenSSL库文件,可以在此下载:
https://github.com/IndySockets/OpenSSL-Binaries
到此结束!