Javascript Postgres JSON函数传递的是字符串而不是对象
因此,我有一个Postgres函数,用于递归合并两个JSONB对象,它在生产服务器上运行良好,但在本地Postgres安装上失败。函数本身是用Javascript Postgres JSON函数传递的是字符串而不是对象,javascript,json,postgresql,stored-functions,jsonb,Javascript,Json,Postgresql,Stored Functions,Jsonb,因此,我有一个Postgres函数,用于递归合并两个JSONB对象,它在生产服务器上运行良好,但在本地Postgres安装上失败。函数本身是用plv8(基本上是一个v8javascript引擎)编写的,需要合并两个JSONB格式的参数;问题是JSON是作为字符串而不是对象传入的,这实际上破坏了整个函数 这只发生在我的本地计算机上,一个新的Postgres 9.4.5安装。生产服务器运行的是9.4.4,这不应该在不同版本之间造成如此重大的变化……关于到哪里去看看这里有什么问题 编辑:现在可以确认,
plv8
(基本上是一个v8javascript引擎)编写的,需要合并两个JSONB格式的参数;问题是JSON是作为字符串而不是对象传入的,这实际上破坏了整个函数
这只发生在我的本地计算机上,一个新的Postgres 9.4.5安装。生产服务器运行的是9.4.4,这不应该在不同版本之间造成如此重大的变化……关于到哪里去看看这里有什么问题
编辑:现在可以确认,恢复到9.4.4不会使其在本地表现出任何不同很难说。可能性:
CREATE CAST
语句-尝试检查psql
命令\dC*json*
FWIW,升级到9.5对我来说似乎解决了这个问题。在本地安装9.4.4并尝试一下?您可能需要一个。您可以将函数中的字符串转换为JSON或JSONB,然后从那里开始工作吗?我们不会知道,除非你发布一些代码。这是内部代码,所以我正在等待确认我是否可以发布。。。我可以告诉您,将JSON字符串强制转换为JSON/JSONB不会影响传递到函数中的内容。不管函数本身得到什么原始字符串。从我所看到的9.4.5中没有bug;我还在
psql
中运行了该命令,两台服务器都提供相同的输出,所以看起来这不是问题所在?