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
相关产品推荐
相关产品推荐

