我拥有的是 Postgresql 中的一个文本列,我想将其转换为 JSONB 列。

我试过的是这样的:

  • CREATE TABLE test (id serial, sec text, name text);
  • INSERT INTO test (id, sec, name) VALUES (1,'{"gender":"male","sections":{"a":1,"b":2}}','subject');
  • ALTER TABLE test ALTER COLUMN sec TYPE JSONB USING sec::JSONB;

  • 这确实将 text 列转换为 jsonb

    但是,如果我尝试查询:
     SELECT sec->>'sections'->>'a' FROM test
    

    我收到一个错误。

    我看到转换仅在一个级别完成(即:sec->>'sections' 工作正常)。

    查询 SELECT pg_typeof(name->>'sections') from test; 给我列类型作为文本。

    有没有办法可以将文本完全转换为 jsonb,以便我可以成功查询 SELECT sec->>'sections'->>'a' FROM test;

    我不想在如下查询中将文本转换为 json,因为我稍后需要在 'a' 上创建索引。
    select (sec->>'sections')::json->>'a' from test;
    

    最佳答案

    操作符 ->> 作为结果给出一个文本。如果需要 -> ,请使用 jsonb :

    select
        pg_typeof(sec->>'sections') a,
        pg_typeof(sec->'sections') b
    from test;
    
      a   |   b
    ------+-------
     text | jsonb
    (1 row)
    

    用:
    select sec->'sections'->>'a'
    from test;
    

    关于json - 如何将文本完全转换为 jsonb 以用于 postgresql 列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38436178/

    10-11 23:54