PostgreSQL 不能打电话 json_object_keys 在 scalar

我有一张桌子 PostgreSQL 用专栏 JSON, 而且我正在尝试获取此列中所有不同键的列表。 为此,我创建了一个请求:


SELECT DISTINCT json_object_keys/j/ FROM t;


在哪里
t

-tablik,A。
j

-柱子 JSON. 它正确地运行了一小组数据,它将列出存在的所有密钥
j

, 没有重复他们。 但是,在添加更大量的数据后,它不再有效,发出错误:


ERROR: cannot call json_object_keys on a scalar


我不太明白为什么会发生这种情况。 刚刚将某个行限制在一起,我发现了导致错误的行。 在这一行
j

- 这是
null

. 但是,挑战
SELECT json_object_keys/null/;

呼叫时不会导致此错误
SELECT json_object_keys/j/ FROM t WHERE id=12;

原因,一。
j

在这条线上只是
null

. 我真的不知道在哪里继续。

因此,我认为我的问题是它可能是这个的原因,我怎样才能绕过它或阻止它?

在职的 PostgreSQL 9.3.9

编辑:好的,我提前写了一下。 我发现
j

在一个问题中不是
null

, 和
'null'::json

, 从简单的字符串中选择了什么。 它

真的

造成错误 scalar, 所以现在我只需要找到一种选择线条的方法
j

不是
'null'::json

.
已邀请:

三叔

赞同来自:

我尝试过此请求过滤值
'null'::json

有这个要求:


SELECT DISTINCT json_object_keys/j/ from t WHERE j <> 'null'::json;


但是,显然没有运营商 json <> json, 因此,我不得不把它带到文本并比较。


SELECT DISTINCT json_object_keys/j/ from t WHERE j::TEXT <> 'null';


有用! 但是,我不是专家 Postgres, 因此,这可能不是制作此检查的最有效方法。

要回复问题请先登录注册