【问题标题】:updating a large string efficiently in postgresql在 postgresql 中有效地更新大字符串
【发布时间】:2015-08-25 13:01:15
【问题描述】:

出于性能原因,我正在缓存一个大型 JSON 响应,并在讨论是使用外部文件还是 postgres 中的文本列。后者的问题是,当我必须完全重建缓存时,更新表的 SQL 非常大。

我查看了 COPY 功能,我可以删除旧行,写出一个 CSV 文件,然后在替换行中进行 COPY,但对我来说感觉很笨拙。

有没有一种高效的方法可以高效地更新包含大量文本的文本列,而无需要求 SQL 解析器解析长得离谱的 SQL 语句?

谢谢。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    使用来自支持服务器端参数绑定的驱动程序的绑定参数(“准备好的语句”)。参数值作为简单的数据块传递,在线路上有一个长度字。这也使错误消息、日志消息等更具可读性。

    PgJDBC 执行正确的服务器端参数绑定,当然libpq 也是如此。很多驱动其实是在客户端做参数绑定的,所以还是会生成很大的语句。

    您可以通过运行启用了log_statement = 'all' 的准备好的语句来确定驱动程序是否正在执行客户端绑定。如果语句看起来像SELECT $1,它使用的是服务器端绑定;如果它看起来像 SELECT 'some_value',它正在使用客户端绑定。

    也就是说,解析字符串文字的开销非常低。我怀疑如果你只做最简单的事情,对现实世界的影响将比你预期的要小。如果问题确实显示出问题的迹象,请修复问题。

    请注意,单个值仍限制为 1GB。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多