postgres 의 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 배열 을 조작 하 는 방법 입 니 다.여러분 께 참고 하 시 기 를 바 랍 니 다.여러분 들 이 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
복합 인덱스에 대한 YugabyteDB 스킵 스캔 일명 느슨한 인덱스 스캔인덱스 스캔이 두 번째 열의 범위에 액세스하기 위해 첫 번째 인덱스 열을 건너뛸 수 있는 방법을 테스트했습니다. 아이디어는 하나( i2 )에 모든 열이 인덱스 키로 있고 다른 하나( i1 )에 키의 일부가 아닌 마지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.