2006年02月23日 星期四

PostgreSQL执行查询等操作要注意释放内存

用PQexec执行SQL语句,一定要用PGresult指针将结果记录下来,并用PQclear 释放,否则内存泄露非常严重。

PQclear 释放于PGresult相关联的存储空间. 任何不再需要的查询结果在不需要的时候都应该用 PQclear释放掉.
void PQclear(PQresult *res);

你可以保留PGresult对象任意长的时间; 当你提交新的查询时它并不消失, 甚至你断开联接后也是这样.要删除它,你必须调用 PQclear.不这么做将导致前端的存储器泄漏.

另外,程序中lsb_geteventrec()得到的eventRec结构一直重用同一处内存,但是由于日志文件中事件结构的大小不同,程序在执行中内存可能会稍微增加一些,目前看属于正常情况。

由 beat 发表于 下午11点19分 | 回复 (0) | 顶端

2006年01月13日 星期五

解决phpPgAdmin中文显示问题

由于Mysql数据库编码为latin1,为了能够与Mysql更好的兼容,PostgreSQL数据库建库的时候选择编码也为latin1

此时web上的jsp页面需指定 charset=8859_1,可以正常显示中文

但是在PostgreSQL的web管理工具phpPgAdmin中,所有的中文全部显示为乱码

解决方法,修改文件phpPgAdmin/classes/Misc.php
第320行
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset={$lang['appcharset']}\" />\n";为
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312 \" />\n";
则均可显示正常。

下面可以专心致志写程序了。显示问题困扰了我有两三个礼拜。轻松了!

由 beat 发表于 上午03点12分 | 回复 (0) | 顶端

2005年11月26日 星期六

PostgreSQL扩展C函数需要注意的几个问题

要包含的头文件:
"postgres.h"
"fmgr.h"

动态内存分配,必须使用其自带的palloc,pfree进行内存分配
对于text*等动态类型,
text * p=(text*)palloc(n);之后还需要
VARATT_SIZEP(p)=n;
否则,用VARSIZE(p)看到的大小将是可用内存的最大值。

对于基本类型,如char *等,则不存在此问题

可变长度类型的结构包含两部分VARHDR和VARDATA
一般情况下,VARHDRSZ为4个字节长度。

由 beat 发表于 上午05点25分 | 回复 (0) | 顶端