我出于性能原因缓存大型JSON响应,并讨论是否使用外部文件或postgres中的文本列。后者的问题是,当我必须完全重建缓存时,用于更新表的SQL非常大。
我查看过COPY函数,我可以删除旧行,写出一个CSV文件,然后在替换行中复制,但对我来说感觉很糟糕。
是否有一种有效的方法以高效的方式更新包含大量文本的文本列,而不要求SQL解析器解析一个可笑的长SQL语句?
感谢。
答案 0 :(得分:1)
使用来自支持服务器端参数绑定的驱动程序的绑定参数("准备好的语句")。参数值作为一个简单的数据块传递,并在线上有一个长度字。这也使错误消息,日志消息等更具可读性。
PgJDBC执行正确的服务器端参数绑定,当然libpq
也是如此。许多驱动程序实际上是在客户端进行参数绑定,因此它们仍会生成一个大型语句。
您可以通过运行启用了log_statement = 'all'
的预准备语句来确定驱动程序是否正在执行客户端绑定。如果语句看起来像SELECT $1
它使用服务器端绑定;如果看起来SELECT 'some_value'
使用客户端绑定。
也就是说,解析字符串文字的开销非常低。我怀疑,如果你只做最简单的事情,现实世界的影响将低于你的预期。如果它确实显示出问题的迹象,请解决问题。
请注意,个别值仍限制为1GB。