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

PostgreSQL函数返回bytea触发invalid input syntax for type bytea错误排查

PL/pgSQL函数返回大JSON时bytea类型报错问题

我编写了如下PL/pgSQL函数:

DECLARE
  cityjson_text bytea;
BEGIN
  SELECT INTO cityjson_text json_agg(cityjson) FROM (
    SELECT
      json_build_object(
        'tileboundary', ST_AsGeoJSON(ST_TileEnvelope(z, x, y, margin => 0.015625))::json,
        'groundgeometry', ST_AsGeoJSON(groundgeometry)::json,
        'location', ST_AsGeoJSON(location)::json,
        'bbox', ST_AsGeoJSON(g.bbox)::json,
        'cityJson', 
        CASE WHEN z > 14 THEN json_build_object( 'cityjsonFeature',cityjsonfeature,
                              'cityJsonMetadata',json_build_object( 'translate',m.translate::float[],
                                                                   'scale',m.scale,
                                                                   'epsg', m.epsg)
                            )
        ELSE null END
      ) AS cityjson
    FROM 
      cj_geometry g
    LEFT JOIN metadata m ON g.metadataid = m.metadataid
    WHERE 
      groundgeometry && ST_TileEnvelope(z, x, y, margin => 0.015625)
    AND 
    -- only intersect if there is a geojson exclude present
      (geojson_input IS NULL OR NOT ST_Intersects(groundgeometry, ST_Transform(ST_GeomFromGeoJSON(geojson_input), 3857)))
  ) AS cityjson_query;
      -- RAISE NOTICE 'Resulting cityjson_text: %', geojson_input;

  RETURN cityjson_text;
END;

问题场景

  • 执行SELECT _a_get_cityjson(16,35205,21497)时,函数可正常运行
  • 执行SELECT _a_get_cityjson(16,35206,21497 )时,触发如下错误:
ERROR:  invalid input syntax for type bytea
CONTEXT:  PL/pgSQL function _a_get_cityjson(integer,integer,integer,text) line 6 at SQL statement 
SQL state: 22P02

经排查,问题大概率出在生成的JSON大小超过约1MB时。目前我可以通过将返回类型改为text规避错误,但text类型传输数据占用空间更大,请问是否有办法提高bytea的大小限制?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:06