psycopg2关于undefined symbol: lo_truncate64解决方法

今天,在centos6.5下安装psycopg2,利用Python连接PostgreSQL数据库的时候,出现了一个undefined symbol: lo_truncate6的错误:

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: /mydev/pyweb/cancerdb/lib/python2.7/site-packages/psycopg2/_psycopg.so: undefined symbol: lo_truncate64

 

究其原因,正如 http://initd.org/psycopg/docs/faq.html 所描述:

“This means that Psycopg was compiled with lo_truncate() support (i.e. the libpq used at compile time was version >= 8.3) but at runtime an older libpq dynamic library is found. Fast-forward several years, if the message reports undefined symbol: lo_truncate64 it means that Psycopg was built with large objects 64 bits API support (i.e. the libpq used at compile time was at least 9.3) but at runtime an older libpq dynamic library is found.”

(psycopg在利用lo_truncate()编译的时候需要libpq至少要9.3以上版本,但是在编译的时候却发现了一个版本较低的libpq。)

 

在网上看到有不少人通过修改psycopg2安装包下的 setup.cfg ,添加PostgreSQL的 pg_config,再重新手动安装psycopg2来解决:

[email protected] 20:13:42 ~
=> vi setup.cfg
.......
# full path.
pg_config=/usr/local/psql-9.4.0/bin/pg_config

# Set to 1 to use Python datetime objects for default date/time representation.
use_pydatetime=1
.......

尝试才发现该方法不能够从根本上解决该问题,undefined symbol: lo_truncate6的报错依然存在。

 

经过一番摸索,结合 psycopg2 官方文档,后来才发现需要把PostgreSQL的 libpq.so.5 跟系统的 libpq.so.5 进行替换,再重新安装psycopg2,问题即可解决:

 

1、find what is the libpq dynamic library used at runtime(查找运行过程中所用的libpq动态库):

$ ldd /path/to/packages/psycopg2/_psycopg.so | grep libpq   

2、You can avoid the problem by using the same version of the pg_config at install time and the libpq at runtime(替换运行过程中的libpq动态库):

[email protected] 17:26:46 /usr/local/download/psycopg2-2.6.1
=> cd /usr/lib64
[email protected] 17:24:09 /usr/lib64
=> rm libpq.so.5
[email protected] 17:24:09 /usr/lib64
=> ln -s /usr/local/postgresql-9.4.0/lib/libpq.so.5 ./

3、重新安装psycopg2,解决问题。

[email protected] 20:24:34 /mydev/pyweb/download/psycopg2-2.5.4
=> python
Python 2.7.5 (default, Jan 13 2015, 13:32:18)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>>
时间: 2024-10-06 10:21:49

psycopg2关于undefined symbol: lo_truncate64解决方法的相关文章

PHP LINUX Notice: undefined $_GET完美解决方法

PHP Notice: undefined 平时用$_GET['xx'] 取得参数值时,如果之前不加判断在未传进参数时会出现这样的警告: PHP Notice: undefined index xxx 虽然可以通过设置错误显示方式来隐藏这个提示,但是这样也有隐患,就是在服务器的日志中会记录这些提示,导致日志文件异常庞大!下面是引用网上流行的解决方法: 首先,这个不是错误,是warning.所以如果服务器不能改,每个变量使用前应当先定义. 方法1:服务器配置修改修改php.ini配置文件,erro

Call to undefined function curl_init()解决方法

今天在使用php中的 curl 扩展时 在开启 情况下,还是出了 Call to undefined function curl_init(),很是不理解,于是开启了所有php的扩展,怕是有关联,结果还是不行,于是百度了一把. 找到下面的结果 在配置php扩展的时候,要先看看扩展有没有依赖其它动态链接库(后面有贴依赖情况).如果有依赖的dll,也不需要拷到system32下面,也不需要把文件位置加到path路径里.在httpd.conf文件中加上: LoadFile 动态链接库的完整路径 比如,

jquery升级到新版本报错[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法(转)

最近把一个项目的jQuery升级到最新版,发现有些页面报错Cannot read property 'msie' of undefined.上jQuery网站上搜了一下,原因是$.browser这个api从jQuery1.9开始就正式废除,js代码里只要用到$.browser就会报这个错.具体说明参见jQuery官方说明. 楼主顺便扩展阅读了一下,发现jQuery· 1.9之后的版本把所有在早期版本里标记为deprecated的api都正式删除了,不再向后兼容.对于升级到最新jQuery的童鞋而

[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法

使用ztree时候没有用默认的1.4版本jquery,报错Cannot read property ‘msie’ of undefined $.browser这个api从jQuery1.9开始就正式废除,js代码用到$.browser就会报这个错.详细说明参见官方说明 解决方法加入下面代码,jQuery文件加载之后,使用$.browser的代码之前. jQuery.browser={};(function(){jQuery.browser.msie=false; jQuery.browser.v

[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法 --转

初用Yii的srbac模块.出现 Cannot read property ‘msie’ of undefined 错误.上网查询,找到如下的文章.使用文末的打补丁的方法,成功搞定.感谢. =============================== http://blchen.com/jquery-can-not-read-property-msie-of-the-undefined-error-solution/ 最近把一个项目的jQuery升级到最新版,发现有些页面报错Cannot re

php中提示Undefined index的解决方法

我们经常接收表单POST过来的数据时报Undefined index错误,如下: $act=$_POST['action']; 用以上代码总是提示 Notice: Undefined index: act in D:\test\post.php on line 20 另外,有时还会出现 Notice: Undefined variable: Submit ...... 等一些这样的提示 出现上面这些是 PHP 的提示而非报错,PHP 本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示.

LIBTOOL is undefined 问题的解决方法

[plain] view plain copy print? configure.ac:10: error: possibly undefined macro: AC_PROG_LIBTOOL If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation. + automake --foreign --copy --add-missing -Woverrid

undefined function mysql_connect()解决方法

在配置apache+php+mysql后,打开一个php网页文件正常,但是php网页中连接数据库时,出现以下提示: Fatal error: Call to undefined function mysql_connect() in  D:\Apache2.2\htdocs\db.php on line 33 步骤阅读 百度经验:jingyan.baidu.com 方法/步骤 1 原因:这是由于未正确配置php.ini文件造成的,在php的目录中,找到php.ini文件.用你喜欢的文本工具打开此

unresolved symbol @__security_check_cookie 解决方法

ntstrsafe.lib(output.obj) : error LNK2019: unresolved external symbol @[email protected] referenced in function __outputntstrsafe.lib(woutput.obj) : error LNK2001: unresolved external symbol @[email protected] 参见:http://support.microsoft.com/kb/89457