这是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?它不像大小超过整数范围
答案 0 :(得分:2)
您可以在this comment中阅读详细信息,但TL; DR是TOAST无法存储大小超过1GB-1B的内容,因此尝试使用palloc非常没有意义。有一些地方使用了MemoryContextAllocHuge(),但听起来好像不会帮助你。