반응형
jsonb 필드의 PostgreSQL 이름 변경 특성
postgresql 9.5에서는 jsonb 필드의 속성 이름을 변경하는 방법이 있습니까?
예를 들어 다음과 같습니다.
{ "nme" : "test" }
로 이름을 변경해야 합니다.
{ "name" : "test"}
인UPDATEdelete(-) 연산자와 concontainate(||) 연산자를 사용합니다.다음은 예를 제시하겠습니다.
create table example(id int primary key, js jsonb);
insert into example values
(1, '{"nme": "test"}'),
(2, '{"nme": "second test"}');
update example
set js = js - 'nme' || jsonb_build_object('name', js->'nme')
where js ? 'nme'
returning *;
id | js
----+-------------------------
1 | {"name": "test"}
2 | {"name": "second test"}
(2 rows)
네스트된 속성을 처리하고 이전 이름을 사용하지 않는 json을 건너뛰기 위해 다음을 사용했습니다.
UPDATE table_name
SET json_field_name = jsonb_set(json_field_name #- '{path,to,old_name}',
'{path,to,new_name}',
json_field_name#>'{path,to,old_name}')
WHERE json_field_name#>'{path,to}' ? 'old_name';
참조 문서 전용:
#-지정된 경로를 가진 필드 또는 요소를 삭제합니다(JSON 배열의 경우 끝에서 음의 정수 카운트).https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSONB-OP-TABLE#>지정된 경로 https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSON-OP-TABLE에서 JSON 개체를 가져옵니다.
이것은 오래된 질문이지만, 이 특정 태스크에 대한 검색 순위에서는 여전히 상위권을 차지하고 있습니다.JSON-ey는 아니지만 적절한 솔루션(키 명명 충돌 위험이 최소인 경우)으로 필드를 TEXT로 처리하여 교체(정규값일 수도 있음)한 후 JSON으로 캐스트하는 방법이 있습니다.
@klin 설정을 빌리면 다음과 같습니다.
CREATE TABLE example(id INT PRIMARY KEY, js JSONB);
INSERT INTO example VALUES
(1, '{"nme": "test"}'),
(2, '{"nme": "second test"}');
UPDATE EXAMPLE
SET js = (REPLACE(js::TEXT, '"nme"', '"name"'))::JSONB
RETURNING *;
언급URL : https://stackoverflow.com/questions/42308764/postgresql-rename-attribute-in-jsonb-field
반응형
'codememo' 카테고리의 다른 글
| 메이븐 의존성 spring-web vs spring-webmvc (0) | 2023.02.12 |
|---|---|
| 레일: 레일의 POST 422(처리 불가능한 엔티티)경로나 컨트롤러 때문인가요? (0) | 2023.02.12 |
| Bad Image Format Exception 입니다.이 문제는 32비트 Oracle 클라이언트 컴포넌트가 설치된 상태에서 64비트 모드로 실행 중일 때 발생합니다. (0) | 2023.02.12 |
| 장애/오류 발생 시 JSON 서비스가 반환해야 할 항목 (0) | 2023.02.12 |
| Angularjs $state 새 탭의 링크 열기 (0) | 2023.02.12 |