向PostgreSQL插入CSV中geography类型数据报几何格式错误如何解决
问题原因
- 你存储的
0101000020BB100000FCA776FD9E256240F2EBF2AD0F0D43C0是十六进制编码的扩展二进制空间数据(EWKB),既不是WKT文本格式,也不是原生二进制格式:ST_GeomFromText要求输入WKT格式(如POINT(116.4 39.9)),传入十六进制串自然解析失败ST_GeomFromWKB要求输入原生二进制(bytea类型),直接传入十六进制文本会被识别为普通字符串的二进制编码,和原始WKB内容完全不符
解决方案
直接使用decode函数将十六进制文本转为二进制,再调用对应的空间函数解析即可,针对geography类型推荐两种写法:
- 调用专门的geography解析函数(推荐)
insert into testtable values (@s1,@s2,@s3,@s4,@s5,@s6,@s7,@s8,@s9,@s10,@s11,@s12,@s13,@s14,@s15,@s16,@s17,@s18,@s19,@s20,@s21,@s22,@s23,@s24,@s25,@s26,@s27,ST_GeogFromEWKB(decode(@s28, 'hex')))
- 直接类型转换(写法更简洁)
insert into testtable values (@s1,@s2,@s3,@s4,@s5,@s6,@s7,@s8,@s9,@s10,@s11,@s12,@s13,@s14,@s15,@s16,@s17,@s18,@s19,@s20,@s21,@s22,@s23,@s24,@s25,@s26,@s27,('\x' || @s28)::geography)
注:你的EWKB本身已经携带SRID信息,不需要额外指定坐标系参数。
内容的提问来源于stack exchange,提问作者user3676367
相关产品推荐
相关产品推荐

