You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中SQL Server迁移后压缩列的等效解压方法咨询

SQL Server压缩数据迁移至PostgreSQL后的解压方案

核心前提确认

SQL Server最常用的COMPRESS()函数生成的是GZIP格式的二进制数据,这是此类问题的典型场景。你遇到的JSON语法错误,本质是用了错误的解码方式(escape),没有正确处理压缩的二进制字节流。

GZIP压缩数据的正确解压语句

如果原数据是SQL Server COMPRESS()生成的,直接使用PostgreSQL的pg_decompress函数处理二进制数据:

SELECT convert_from(pg_decompress(sdata::bytea), 'UTF8')::jsonb
FROM dbo.s_table;

原语句失败原因

decode(sdata, 'escape')是用于解码escape编码的字符串,而SQL Server的压缩结果是原生二进制字节流,并非escape编码文本。错误的解码逻辑会导致得到的内容不是合法的JSON原数据,进而触发语法错误。

其他场景的适配处理

  1. 数据经过Base64编码
    若迁移前数据被Base64编码过,需先解码为bytea再解压:

    SELECT convert_from(pg_decompress(decode(sdata, 'base64')), 'UTF8')::jsonb
    FROM dbo.s_table;
    
  2. 使用DEFLATE算法压缩
    若原SQL Server采用DEFLATE而非GZIP压缩,改用zlib_decompress函数:

    SELECT convert_from(zlib_decompress(sdata::bytea), 'UTF8')::jsonb
    FROM dbo.s_table;
    
  3. 字符编码不匹配
    解压后出现乱码时,检查原SQL Server数据的字符编码(比如GBK),调整编码参数:

    SELECT convert_from(pg_decompress(sdata::bytea), 'GBK')::jsonb
    FROM dbo.s_table;
    

验证步骤

先单独查询解压后的文本内容,确认是否为合法JSON:

SELECT convert_from(pg_decompress(sdata::bytea), 'UTF8')
FROM dbo.s_table
LIMIT 1;

如果输出为乱码或非JSON格式,说明压缩方式判断错误,或数据迁移过程中存在损坏。

内容的提问来源于stack exchange,提问作者synccm2012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:41:03