用palloc分配

时间:2016-03-30 19:37:04

标签: postgresql odbc

这是postgres扩展程序的一部分,我试图理解为什么下面的代码行会给我这个错误:

ERROR:  invalid memory alloc request size 1073741824

This代码是postgres的odbc fdw;当我使用扩展来创建一个sql server外表时,我得到了那个错误;当一个sql server列被声明为nvarchar(max)时,问题就开始了,根据this,nvarchar(max)的最大大小是1073741823.代码试图基本上这样做:

char * buf;

//varsize contains the max size of nvarchar(max)

buf = (char *)palloc(sizeof(char) * (varsize + 1));

什么是palloc正是这样做,你不能在指针中分配超过1073741823?它不像大小超过整数范围

1 个答案:

答案 0 :(得分:2)

您可以在this comment中阅读详细信息,但TL; DR是TOAST无法存储大小超过1GB-1B的内容,因此尝试使用palloc非常没有意义。有一些地方使用了MemoryContextAllocHuge(),但听起来好像不会帮助你。