postgres 의 jsonb 속성 사용 동작

5946 단어 postgresjsonb속성
jsonb 의 간단 한 조작(첨삭 검사)
1.업데이트 작업(attributes 속성 은 jsonb 형식)
방법 정의:

jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])
인자:target:목표(jsonb 유형의 속성)path 경로,jsonb 가 배열'{0,a}'이 라면 아래 표 시 된 위치 에서 a 속성 을 업데이트 하 는 것 을 표시 합 니 다.배열 이 아 닌 대상 이 라면'{a}'을 쓰 면 됩 니 다.
새로운 값
매개 변수 선택:createmissing:jsonb 필드 에 f1 속성 이 존재 하지 않 을 때 만 듭 니 다.기본 값 은 true 입 니 다.
업데이트 후 jsonb
공식 문서 에서 보 여 준 예제(jsonb 배열):

jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false)
  :[{"f1":[2,3,4],"f2":null},2,null,3]
jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}','[2,3,4]')
  :[{"f1": 1, "f2": null, "f3": [2, 3, 4]}, 2]
jsonb 속성 업데이트:

-- attributes jsonb    (     json)
  :{"a":"1"}
update user_test set attributes = jsonb_set(attributes,'{a}','"0"'::jsonb, false) where id = '8888';
   :{"a":"0"}
jsonb 에 속성 삽입:

--    attributes      platform:baidu
update user_test set attributes =  attributes::jsonb || '{"platform":"baidu"}'::jsonb;
  :
update user_test set attributes = jsonb_set(attributes, '{platform}','"baidu"');
조회 하 다.

select value from json_each('{"a":"foo", "b":"bar"}') where key = 'a'
select * from json_object_keys('{"a":"foo", "b":"bar"}')
select * from json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')
select  * from json_object_keys(from ci_type.attributes);--  
select * from to_jsonb('"a":1,"b":2') 
 select '{"a":1,"b":2}'::json->>'b' --  jsonb      (  )
 --select * from json_each( to_jsonb(select distinct attributes from ci_type ) )
 --select to_jsonb(select distinct attributes from ci_type ) 
 
--            
  select  attributes :: json->>'instanceType' from ci_type 
--      jsonb
select to_jsonb('id:'||id::text) from ci
--jsonb    ,    
select '{"a":"foo", "b":"bar"}'::jsonb || '{"c":"fc", "d":"bdd"}'::jsonb--  
select '{"a":"foo", "b":"bar"}'::jsonb -'c'-'d'-'a'||'{"a":2}'--  
select '{"a": "b","c":3}'::jsonb - 'a'
--       json  :#>
SELECT '{"a":1,"b":{"ba":"b1","bb":"b2"},"c":3}'::JSON #> '{b,ba}'
  :"b1"
SELECT '{"a":1,"b":{"ba":"b1","bb":"b2"},"c":3}'::JSON #> '{b}'
  :{"ba":"b1","bb":"b2"}
--       json   text:#>>
SELECT '{"a":1,"b":{"ba":"b1","bb":"b2"},"c":3}'::JSON #>> '{b,ba}'
  :"b1"
보충 해 주세요.
1、to_jsonb()방법 은 매개 변 수 를 받 아들 여 jsonb 로 변환 합 니 다.

jsonb       
#   user  attributes    create_time       
update user_test
set attributes = jsonb_set(attributes,'{create_time}',to_jsonb(extract(epoch from now())*1000), true)
2、extract(epoch from now())*1000 밀리초 값 획득

EXTRACT(field FROM source)
field 는 취 하 는 시간 대상 을 표시 하고 source 는 취 하 는 날짜 출처 를 표시 하 며 유형 은 timestamp,time 또는 interval 입 니 다.

EXAMPLE:select extract(year from now());
현재 1970-01-01 00:00:00 UTC 의 초 수 를 확인 합 니 다.new_value신기원 시간 Epoch 는 1970-01-01 00:00:00 UTC 를 기준 으로 하 는 시간 으로 목표 시간 과 1970-01-01 00:00:00 시간의 차 이 를 초 로 계산 하고 단 위 는 초 이 며 마이너스 일 수 있 습 니 다.
postgresql 조작 jsonb 배열
먼저 표 구조 보기:

create table person 
(id int, --      
label jsonb); --       (          ),          
label 필드 데이터 인 스 턴 스

[{"id":1,"code":"p123","name":"ali"},{"id":2,"code":"p123","name":"ali"}]
요구:sql 을 써 서 탭 을 추가 하고 탭 을 삭제 하 며 탭 을 비 웁 니 다.
1.태그 추가
||기 호 를 직접 사용 하여 jsonb 두 개 를 jsonb 로 연결 합 니 다.

--  label null 
update person set label =  '{"id":1,"code":"p123","name":"ali"}'::jsonb;

-- label  null   
update person set label =  '{"id":1,"code":"p123","name":"ali"}'::jsonb || label
메모:label 이 null 일 때 이렇게 실행 하면 마지막 으로 얻 은 것 도 null 입 니 다.
2.라벨 비우 기
이것 은 비교적 간단 합 니 다.제 가 직접 null 로 설정 하 겠 습 니 다.

update person set label = null;
3.탭 삭제
이것 은 좀 번 거 롭 습 니 다.제 가 사 용 했 습 니 다.

-> ->> jsonb_array_elements() jsonb_build_array() array()
이러한 기호 와 함수 의 용법 에 익숙 하지 않 은 것 은 다음 과 같다.

update person 
set label = jsonb_build_array(
    array( --       ,       2       ,  jsonb_build_array       json
        (select * from 
         (select jsonb_array_elements(label)j from person where id = 1)as a 
         where (j->>'id')::int <> 1) --          
    )
)->0 --             [[]]   
where id = 1;
이상 은 제 가 pg 에서 jsonb 배열 을 조작 하 는 방법 입 니 다.여러분 께 참고 하 시 기 를 바 랍 니 다.여러분 들 이 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기