摘要:
在 postmaster.c 中看到这种代码,从Java程序员的角度,看起来是很不爽的:char *ListenAddresses;... if (ListenAddresses) { char *rawstring; List *elemlist; ListCell *l; ...到底何时 ListenAddress 的逻辑值为真呢?试作如下代码进行验证:char *ListenAddresses;intmai... 阅读全文
摘要:
为了验证对数据缓冲区 PqSendBuffer写入数据未满时,也要进行flush。对代码进行如下修改:pqcomm.c 的internal_putbytes 函数:头部加入:fprintf(stderr,"len is: %d",len); fprintf(stderr," , PqSendPointer is: %d\n", PqSendPointer);pqcomm.c 的pq_flush 函数:头部加入:fprintf(stderr," pq_flush is called\n.");重新编译后,启动Postgresql(非后台 阅读全文
摘要:
message level 函数pq_putmessage调用 low level 函数 pq_putbytes,pq_putbytes调用 internal_putbytes。从internal_putbyes上来看,就可以发现其数据发送的机制:有一个小技巧,如果数据缓冲区满了,就发送,否则就先堆在那儿。如果原有数据+本次数据量大于数据缓冲去大小那就分多次循环发送。internal_putbytes(const char *s, size_t len) { size_t amount; while (len > 0) { /* I... 阅读全文
摘要:
async.c的 static void NotifyMyFrontEnd(const char *channel, const char *payload, int32 srcPid) 函数中的主要逻辑是这样的:if (whereToSendOutput == DestRemote) { StringInfoData buf; pq_beginmessage(&buf, 'A'); //cursor 为 A pq_sendint(&buf, srcPid, sizeof(int32)); //追加 srcPid pq_sends... 阅读全文