-
Notifications
You must be signed in to change notification settings - Fork 15
Description
https://github.com/HuaweiCloudDeveloper/gaussdb-drivers/blob/main/docs/diff-gaussdb-postgres.md
GaussDB不支持JSON和JSONB类型的隐式转换
在505.2和506.0版本上测试,SELECT '{"a":1}'::jsonb || '{"b":2}'; 该查询是不会报错的,问题在于没有jsonb||jsonb这个操作符,因此前者会隐式转换成text类型,以匹配text||text操作符,而原生PG是有jsonb||jsonb的,所以后面的改写方案CAST('{"a":1}' AS JSONB) || '{"b":2}'其实和'{"a":1}'::jsonb || '{"b":2}'没有区别,返回结果也是错误的,不仅返回类型不对,还少了逗号,正确的改法应该是CAST('{"a":1}' ||','|| '{"b":2}' AS JSONB) 或('{"a":1}' ||','|| '{"b":2}' )::jsonb
real 类型精度与取值差异
这个行为受参数extra_float_digits影响 ,GaussDB服务端配置默认为0 ,使用gsql查询,文档中的用例查询结果和postgres是一致的。有差异的场景是当postgres和GaussDB均配置为非默认值,比如3时,postgres 返回101.3,GaussDB返回101.300003 。另外,JDBC驱动会自动设置这个参数为3以保留最大小数位数(原生PG的JDBC驱动会根据不同版本设置不同的值)
不支持refcursor关键字
其实是支持的,链接里的用例是因为变量名使用了关键字ref导致的,换个变量名就行了。
最后,GaussDB不同版本的行为不一致,描述问题时建议把问题版本都带上