今天,在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来解决:

shenweiyan@localhost :: ~
=> vi setup.cfg
.......
# full path.
pg_config=/usr/local/psql-/bin/pg_config

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

尝试才发现该方法不能够从根本上解决该问题,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动态库):

root@localhost :: /usr/local/download/psycopg2-
=> cd /usr/lib64
root@localhost :: /usr/lib64
=>
root@localhost :: /usr/lib64
=> /lib/libpq.so. ./

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

shenweiyan@localhost :: /mydev/pyweb/download/psycopg2-
=> python
Python  (default, Jan  , ::)
[GCC   (Red Hat -)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>>

ok,问题解决!!!


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

  1. Linux下Python3.5使用pyqt5.11报错 ImportError: /usr/local/lib/python3.5/dist-packages/PyQt5/QtCore.so: undefined symbol: PySlice_AdjustIndices 解决方法

    我用的Linux自带的是Python3.5版本,运行pip3 install PyQt5, 下载的是PyQt5.11,运行PyQt5程序会报错: ImportError: /usr/local/lib ...

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

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

  3. [jQuery1.9]Cannot read property ‘msie’ of undefined错误的解决方法

    原文:[jQuery1.9]Cannot read property 'msie' of undefined错误的解决方法 $.browser在jQuery1.9里被删除了,所以项目的js代码里用到$ ...

  4. LaTex: Undefined citation warnings 解决方法

    参考 Undefined citations LaTex: Undefined citation warnings 解决方法 在使用TexMaker编译文献的时候,出现引用参考文献的问题: Packa ...

  5. php中提示Undefined index的解决方法

    我们经常接收表单POST过来的数据时报Undefined index错误,如下: $act=$_POST['action']; 用以上代码总是提示 Notice: Undefined index: a ...

  6. Z-BlogPHP 安装出现 (8) Undefined offset: 6 解决方法

    有些cp面板的空间会在每个网页头部和页脚增加两个调用的文件,导致zblogPHP安装出错:(8) Undefined offset: 6 主要国外的主机中PHP配置文件两个选项auto_prepend ...

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

    PHP Notice: undefined 平时用$_GET[‘xx’] 取得参数值时,如果之前不加判断在未传进参数时会出现这样的警告: PHP Notice: undefined index xxx ...

  8. xcode duplicate symbol _GAD_MD5 解决方法

    添加了mobi的广告平台后,在Device状态打包时,出现此错误. duplicate symbol _GAD_MD5 in: 解决方法: Targets ->Build Setting  中设 ...

  9. Call to undefined function curl_init()解决方法

    今天在使用php中的 curl 扩展时 在开启

随机推荐

  1. Dom兼容问题记录汇总

    DOM方法兼容表   Chrome FireFox IE6 IE7 IE8 IE9 IE10 innerText 支持 不支持(改成了textContent) 支持 支持 支持 支持 支持 inner ...

  2. jQuery UI Datepicker&Datetimepicker添加 时-分-秒 并且,判断

    jQuery UI Datepicker时间(年-月-日) 相关代码: <input type="text" value="" name="ad ...

  3. 使用DBUtils小框架

    DBUtils对sqlserver好像支持不怎么好,经常出现问题 比如 三月 14, 2015 10:19:32 上午 com.mchange.v2.log.MLog 信息: MLog clients ...

  4. 使用SC命令时注意事项

    使用SC命令时注意事项[转] Windows 2003 Server存在一个sc命令,(好像Windows 2000/XP/NT都有这个.)该命令可以手工创建Windows服务(NT Service) ...

  5. NOI十连测 第四测 T3

    思路: 算法一:可以n^2找出每个点的权值,然后n^2做完,预计得分10 算法二:随机找点然后每次找最高..貌似只有10分?然而考试的时候煞笔了,边界设成inf.. 算法三:随机找几个点,然后随机爬山 ...

  6. LeetCode_Roman to Integer

    Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...

  7. Material风格的Quick组件,妈妈再也不用担心我的界面不好看了

    https://github.com/papyros/qml-material http://www.zhihu.com/question/38523930

  8. qt 多线程之间通讯

    问题描述:界面线程MainApp为主线程,工作线程MyThread为一子线程,从工作线程向主线程传递字符串用于在主线程中显示. Qt的信号与槽机制可以将任何继承自QObject类的对象捆绑在一起,使不 ...

  9. Calendar中add函数和roll函数的用法及区别

    Calendar中add()和roll()函数的用法一.取某个时间点后的整点时刻.例如1984年7月7日15:23:05后的整点时刻即为1984-07-07 16:00:00.实现如下:Calenda ...

  10. Redhat关闭SELinux和防火墙的办法(转)

    Redhat使用了SELinux来增强安全,关闭的办法为:1. 永久有效修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重 ...