详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

时间:2024-03-14 08:29:21

oracle_fdw的使用教程点击这里

1.首先到github oracle_fdw下载最新版本的oracle_fdw压缩包,找到符合系统与PostgreSQL数据库的版本(本人为win7-32bit、pssql9.3.18),所以选择如下版本

详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

2.下载完成将zip包解压,得到如下左图文件。把【lib】文件夹的oracle_fdw.dll和【share/extension】目录下的三个文件(下右图)分别复制到PostgreSQL安装目录下的【lib】文件夹和【share/extension】目录里去。

详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

此时,可以使用select * from pg_available_extensions;语句能查询到oracle_fdw extension,说明成功放置到目录里了,但还没有被安装(isstalled_version 列为null).如果你这时用create  extension oracle_fdw;语句安装,发现是会不成功滴。因为还要oracle client。

详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

3.安装oracle client。本人已经安装有oracle forms&reports builder这些软件,还有sqlplus也有,以为客户端也就有了,结果执行创建语句还是失败(如下图)。{个人猜想:可能是客户端版本太旧或者根本没有,但sqlplus能用啊,就暂且不理了}

详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

Oracle官方页面下载轻量级的客户端oracle instant client(不用安装oracle11g数据库那么笨重),找到对应OS与数据库版本(本人连接的数据库为11.2.0.4.0),下载basic package(如果不需要操作oracle数据库应该仅下载此包即可,待验证),本人把sql*plus包也下载(为了验证oracle isntat client是否安装成功,能在sqlplus连接上数据库就是成功了)。

详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

安装过程:把basic package解压,若有下载其他包,把其他包解压后得到的文件复制放到instantclient_11_2(解压basic包后的文件夹)里,把tnsnames.org也复制一份到isntantclient_11_2文件夹(tnsnames.org必须配置好);

配置环境变量NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280

Path:E:\Program Files\instantclient_11_2(此处为你的oracle instant client 所在路径添加到path中)


{有的文章说还要配置ORACLE_HOME = XX:\instantclient_11_2;TNS_ADMIN = XX:\instantclient_11_2两个系统变量的,我没配置最后的最后也OK;

除了安装oracle instant client,我在另一台安装有oracle11g的机子上按步骤1、2,然后直接使用create extension oracle_fdw也能成功创建}


配置好这些后,我重新启动电脑及重新连接postgresql,创建的时候还是提示“无法加载库XXXXXXoracle_fdw.dll”:The specified procedure could not be found.

【网上说法与个人想法】oracle_fdw是通过oci接口访问Oracle。看到github上有人说是more than one oracle installation,导致有多个oci.dll,PostgreSQL服务进程不能找到oracle client库文件oci.dll。我看了系统变量Path的第一个值是我前面所说的安装forms&reports的oracle bin路径,我把oracle instant client的路径追加到末端,可能导致PostgreSQL进程直接找第一个路径的oci.dll,而该oci.dll对应的版本可能太旧或者这个oci.dll根本不具备oracle client的角色吧,因此找到这个oci.dll也没用,也就导致了步骤3把oracle client的路径添加到系统变量也没用。

详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

               详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

最后我把oracle instant client的途径放到Path系统变量第一值的位置,重启计算机,再create extension oracle_fdw终于安装成功了。在pg_available_extensions也能看到installed_version字段不为null.

详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误

看完本方法有任何问题欢迎讨论交流~