如果此列是jsonb,我想选择列键值。 如果不是jsonb,我只想选择该列。
代码如下:
typedef struct my_struct_optional_name {
uint32_t ui32_1;
uint32_t ui32_2;
char char_1;
// compiler inserts padding unless #pragma pack is in effect
uint64_t ui64_1;
} my_struct_t;
my_struct_t *my_struct = aligned_alloc(64, sizeof(my_struct_t));
它不起作用,因为仍会以某种方式为非JSONB类型的列评估SELECT
CASE WHEN (pg_typeof(mycolumn)::text LIKE 'jsonb')
THEN mycolumn->>'mykey'
ELSE mycolumn
END
FROM mytable;
。
错误:运算符不存在:[...]->>未知
提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
有没有一种方法可以使PostgreSQL类型检查接受此语句,或者还有其他方法可以做到这一点?
答案 0 :(得分:2)
通常,您可以通过将查询结果转换为text
来完成此操作:
SELECT
CASE WHEN (pg_typeof(mycolumn)::text LIKE 'jsonb')
THEN (mycolumn::text::jsonb)->>'mykey'
ELSE mycolumn::text
END
FROM mytable;