2012-09-13 2 views

답변

29

[Nb. 많은 내가 너무 대답을 업데이트하는 생각 때문에 문제가 게시 된 이후 일어난 - 이제 새로운 장고의 PostgreSQL과 PostgreSQL 9.3 정보]

PostgreSQL을 포함하여 9.3

PostgreSQL의에서

JSON 지원 (참조 doc 더 해지고있다 JSON 필드에서 데이터베이스 열처럼 검색 할 수있게되었습니다!이 지원은 여전히 ​​기본 컬럼 연산자와 같습니다 (앞에서 살펴 보겠습니다). 장고 ORM을 통해 사용하는 것이 현명 할 것입니다

PostgreSQL 9.2

JSON 데이터 유형은 pgSQL 9.2에서 basically text입니다. 추가 된 것은 JSON 유효성 검사입니다. 유용하지만 헤드 터닝은 아닙니다.

은 ** 장고와 장고 고급 PostgreSQL을 지원

최근 Kickstarted backed development PostgreSQL을 JSON은 몇 달 전에 투자되었다. 여기에는 JSON 유형에 대한 고급 지원이 포함되지만 9.4에만 포함됩니다.

Postgres 팀은 최근 jsonb 데이터 유형 (바이너리 저장 JSON)에 대한 지원을 병합했습니다. Postgres 9.4가 종료 될 때까지 JSON 지원을 지연시키고 jsonb 데이터 유형 만 지원할 가능성이 매우 높습니다. 여기에는 여러 가지 이유가 있습니다. 가장 중요한 것은 현재의 json 데이터 유형이 구현에서 완전히 제한되어 있고, 동등성 연산자조차도 없다는 것입니다. 이것은 장고 어노테이션 코드의 일부가 유효하지 않은 쿼리 (이 보고서 참조)를 생성 함을 의미하며 __exact 룩업을 금지해야한다는 것을 의미합니다. 장고에서 이러한 모든 엣지 케이스를 적절하게 처리하려면 엄청난 복잡성이 따르고 텍스트 필드에 json을 저장하는 것 이상의 이점은 실제로는 상당히 제한적입니다. 9.4는 올해 말에 출시 될 예정이므로 JSON 필드는 1.8 릴리스에서만 기능 할 것입니다.

출처 : 또한 mjtamlyn blog

Psycopg 이제 기본적으로 JSON field (뿐만 아니라 HSTORE)를 지원합니다.

** 장고 DIY는 특별한 데이터베이스 유형을 사용하여 자신의 모델 필드를 만들 꽤 쉽게 장고

, field db_type()를 참조 **.

것을 주목하십시오 : 이것은 단지 pgSQL의에서 작동 할

  1. 은 - 현재 대부분 얻게 될 것이다
  2. (조건부 다른 데이터베이스에 '텍스트'형식을 반환 할 수 있습니다하지만) 당신은 당신의 코드 이식성을 제한하고 오직 데이터베이스 측 json 유효성 확인
  3. 그리고 물론 JSON 객체를 직접 가져 오는 즐거움!

하지만 당신이 정말로 파이썬에서 JSON 덤프 /로드 비용을 건너 뛰는되지 않도록 파이썬, JSON에 대한/직접/지원하지 않도록주의; 당신은 문자열 변환을 피할 수 있습니다 -하지만 내부적으로 점검하지 않았거나 실제적인 차이가 있는지를 벤치마킹하지 않았습니다.

PostgreSQL을 9.3으로 물건 같은 외모 당신은 또한 django JSONField에서 시작하고 이미 boilercode 판을 많이 얻을 수

더 흥미로운 될 수도 다음, 단순히 db_type 메소드를 오버라이드 (override).

더 흥미롭고 가치있는 데이터베이스 잠금 기능 (pgSql을 좋아합니다!)은 array_to_json and row_to_json을 사용하여 데이터를 JSON 구조로 다시 가져 오는 pgSQL의 옵션입니다. 질문의 범위를 벗어나는 질문 모음에 더 심각한 변경이 필요합니다.

+0

json 유형의 필드에 대해 색인을 생성 할 수 있습니까? –

+0

아래의 링크는 색인 생성을 허용하는 옵션을 보여줍니다. 기본적으로 텍스트를 char 필드로 변경합니다. https://github.com/bradjasper/django-jsonfield#other-fields – stormlifter

+0

이 질문과 몇 가지 데이터 포인트가 있습니다. (1)'django-pgfields'는 JSON 데이터 형식을 사용하는 래퍼를 제공하지만 Postgres JSON 조회 기능에 대한 기본 액세스는 제공하지 않습니다. (2) 2014 년 2 월에 킥 스타터가 완전히 지원되어 Django 1.8의 대상 제공과 함께'django.contrib.postgres'의 모든 Postgres 데이터 유형에 대한 원시 Django 지원이 구현되었습니다. 공개적으로 발표 된 코드는 매우 기본적인 기능으로 만 진행되었습니다. https://www.kickstarter.com/projects/mjtamlyn/improved-postgresql-support-in-django – mirth23

8

장고 1.9부터 JSONField은 Django와 함께 제공되는 django.contrib.postgres.fields 모듈에서 사용할 수 있습니다. 이 필드는 PostgreSQL 필드 유형 jsonb (json이 아님)을 사용합니다.

관련 문제