json 데이터 유형의 json 요소 업데이트


14

PostgreSQL 9.3 데이터 유형에서 요소를 업데이트하는 방법을 알 수 없습니다.

내 예 :

CREATE TABLE "user"
(
  id uuid NOT NULL,
  password character varying(255),
  profiles json,
  gender integer NOT NULL DEFAULT 0,
  created timestamp with time zone,
  connected timestamp with time zone,
  modified timestamp with time zone,
  active integer NOT NULL DEFAULT 1,
  settings json,
  seo character varying(255) NOT NULL,
  CONSTRAINT id_1 PRIMARY KEY (id)
)
WITH (
  OIDS=TRUE
);
ALTER TABLE "user"
  OWNER TO postgres;

"프로파일"의 json 부분

{
    "Facebook": {
        "identifier": "xxxxxxxxxxx",
        "profileURL": "none",
        "webSiteURL": "none",
        "photoURL": "none",
        "displayName": "test2 test2",
        "description": "none",
        "firstName": "test2",
        "lastName": "test2",
        "gender": 2,
        "language": "none",
        "age": "none",
        "birthDay": "none",
        "birthMonth": "none",
        "birthYear": "none",
        "email": "test@test.com",
        "emailVerified": "none",
        "Added": null,
        "phone": "none",
        "address": "none",
        "country": "none",
        "region": "none",
        "city": "none",
        "zip": "none"
    },
    "Google": {
        "identifier": "xxxxxxxxxxxxxxxxxxxxxx",
        "profileURL": "none",
        "webSiteURL": "none",
        "photoURL": "none",
        "displayName": "test2 test2",
        "description": "none",
        "firstName": "test2",
        "lastName": "test2",
        "gender": 2,
        "language": "none",
        "age": "none",
        "birthDay": "none",
        "birthMonth": "none",
        "birthYear": "none",
        "email": "test@test.com",
        "emailVerified": "none",
        "Added": null,
        "phone": "none",
        "address": "none",
        "country": "none",
        "region": "none",
        "city": "none",
        "zip": "none"
    }
}

프론트 엔드에 x-edit을 사용하고 있는데 이와 같은 것이 작동하기를 바랐지만 그렇지 않습니다.

UPDATE public.user 
SET "profiles"->'Facebook'->'social'->'facebook' = 'test' WHERE` id='id'

json 데이터 유형을 업데이트하는 방법에 대한 정보를 찾지 못하는 것 같습니다.

답변:


7

문자열 일 뿐이므로 regex_replace함수 를 사용하여 노드를 간단하게 변경 / 삭제할 수 있습니다.

예를 들어, 이것은 최근에 테이블에서 모든 JSON 노드를 삭제 한 방법입니다 (모든 행).

UPDATE my_db.my_table
SET my_column = (regexp_replace(my_column::text, ',"some_json_node":(.*),', ','))::json
WHERE NOT my_column IS NULL

참고를 위해 모든 내 JSON 데이터, 나는 계속 "version":"(n).(n)"객체에 (즉, 스키마 버전) 노드를. 그렇게하면 특정 버전을 준수하는 객체를 업데이트 할 수 있습니다. 귀하의 요구 사항은 그렇게 복잡하지는 않지만 요구 사항이 있다면 확실히 도움이됩니다.


I 내지 컬럼 이름 높이 등 JSON 개체이 필요 = { '부' 'CMS', '값을'150}
라울 Dapke

3

Postgres 9.3의 전체 필드를 업데이트해야한다고 생각합니다. 적어도 이것이 문서가 알려주는 것입니다.

내가 실수하지 않으면 JSON 문서에서 개별 요소를 업데이트하는 것은 9.4입니다.


2

이 시도

UPDATE Tablename
SET columnname = replace(columnname::TEXT,'"name":','"my-other-name"')::jsonb 
WHERE id = 1;

I 내지 컬럼 이름 높이 등 JSON 개체이 필요 = { '부' 'CMS', '값을'150}
라울 Dapke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.