codememo

jsonb 필드의 PostgreSQL 이름 변경 특성

tipmemo 2023. 2. 12. 17:56
반응형

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

반응형