Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 错误:共享内存不足_Postgresql_Loops_Memory - Fatal编程技术网

Postgresql 错误:共享内存不足

Postgresql 错误:共享内存不足,postgresql,loops,memory,Postgresql,Loops,Memory,我有一个插入给定数量测试记录的查询。 它看起来像这样: 创建或替换函数_MiscrandomizerVnumberOfRecordsint 返回void作为$$ 声明 -声明将要使用的所有变量 开始 从tbluser中选择进入vTotalRecords count*; vIndexMain:=vTotalRecords; 环 当vIndexMain>=vNumberOfRecords+vTotalRecords时退出; -设置将用于插入的其他一些变量 -在tblUser中插入带有这些变量的记录

我有一个插入给定数量测试记录的查询。 它看起来像这样:

创建或替换函数_MiscrandomizerVnumberOfRecordsint 返回void作为$$ 声明 -声明将要使用的所有变量 开始 从tbluser中选择进入vTotalRecords count*; vIndexMain:=vTotalRecords; 环 当vIndexMain>=vNumberOfRecords+vTotalRecords时退出; -设置将用于插入的其他一些变量 -在tblUser中插入带有这些变量的记录 -在其他一些表中插入记录 -运行另一个函数,计算并保存有关插入记录的一些统计信息 vIndexMain:=vIndexMain+1; 端环; 回来 终止 $$语言plpgsql; 当我对300条记录运行此查询时,它抛出以下错误:

**********错误********** 错误:共享内存不足 SQL状态:53200 提示:您可能需要增加每个事务的最大锁数。 上下文:SQL语句创建临时表\u计数。。。 PL/pgSQL函数PRCSTATSUPDATE在SQL语句中的整数行25 SQL语句SELECT prcStatsUpdatevUserId PL/pgSQL函数_miscrandomizerinteger第164行执行 函数prcStatsUpdate如下所示:

创建或替换函数prcStatsUpdatevUserId int 返回void作为 $$ 声明 重计数布尔; 性别歧视布尔; 开始 -确定是否需要执行此统计数据计算 选择重新计票 计数*>0时为true,否则为false结束 来自tblSomeTable q 其中[x=y] 和[x=y]; -如果上述为真,则确定统计数据之前是否已计算 选择进入vRecordsExist 计数*>0时为true,否则为false结束 来自tblSomeOtherTable c 内连接tblSomeTable q 关于q.Id=c.Id 其中[x=y] 和[x=y] 和[x=y] vRequireCount=真; -计算计数并将其存储在临时表中 创建临时表_计数。。。; 插入_countsx,y,z 选择uqa.x、uqa.y、count*作为帐户 来自tblSomeOtherTable uqa 内连接tblSomeTable q 关于uqa.Id=q.Id 其中uqa.Id=vUserId 和qId=[SomeOtherVariable] 和[x=y] 并且vRequireCount=真 按uqa.x、uqa.y分组; -如果存在统计记录,则更新它们;else-插入新的 更新tblSomeOtherTable 设置帐户=c.A帐户 从 其中c.Id=tblSomeOtherTable.Id 和c.OtherId=tblSomeOtherTable.OtherId 而且vRecordsExist=正确 vRequireCount=真; 插入tblSomeOtherTablex,y,z 选择x、y、z 从! 其中vRecordsExist=false vRequireCount=真; 下降表_计数; 终止 $$语言plpgsql; 看起来这个错误是某个地方内存累积的结果,但由于我创建了临时表,使用它并立即删除,因此据我所知,释放内存是不可能的

更新

我更新了prcStatsUpdate函数以表示我拥有的实际函数。我只是将表名和列名替换为通用名称。 我第一次没有发布这篇文章的原因是,它主要是非常简单的sql操作,我认为它不会有任何问题

还有,你从哪里开始数线?它说错误在第25行,但这不可能是真的,因为如果从开始计数,第25行是where子句中的一个条件。你从一开始就开始数数吗


有什么想法吗?

只有在事务结束时删除临时表时才会释放锁

你看


如果可能,您应该在函数外部重新组织代码以创建临时表,并在函数内部截断/填充它。

我更新了我的问题。谢谢你的建议,把整个代码。你有没有尝试增加最大锁每交易?我还没有。在我这么做之前,我想我会问是否有人能指出我可能遗漏的错误。我想了解是什么导致了这种情况发生。你查过max_锁每个事务的控制吗?