이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 8.14. 토토 사이트 순위 유형버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

8.14. 무지개 토토type

무지개 토토 데이터 유형은 무지개 토토 (javaScript 객체 표기법) 데이터를 저장하는 것입니다.RFC 7159. 이러한 데이터는로 저장 될 수 있습니다.텍스트, 그러나 무지개 토토B 데이터 유형은 무지개 토토B 규칙에 따라 각 저장된 값이 유효하다는 것을 시행 할 수 있습니다. 또한 이러한 데이터 유형에 저장된 데이터에 사용할 수있는 다양한 무지개 토토B- 특이 적 기능 및 연산자가 있습니다.섹션 9.15.

두 가지 무지개 토토 데이터 유형이 있습니다 :무지개 토토and무지개 토토B. 그들은 받아 들여거의입력과 동일한 값 세트. 실질적인 차이점은 효율성 중 하나입니다.무지개 토토데이터 유형은 입력 텍스트의 정확한 사본을 저장하며, 이는 각 실행에 따라 처리 기능이 다시 시작되어야합니다. 하는 동안무지개 토토B데이터는 분해 된 이진 형식으로 저장되어 전환 오버 헤드가 추가되어 입력이 약간 느리게 만들어 지지만 재배치가 필요하지 않기 때문에 처리가 훨씬 빠릅니다.무지개 토토B또한 인덱싱을 지원합니다. 이는 상당한 이점이 될 수 있습니다.

왜냐하면무지개 토토입력은 입력 텍스트의 정확한 사본을 저장하면 토큰 사이의 의미 적으로 유의 한 공백과 무지개 토토B 객체 내의 키 순서를 보존합니다. 또한 값의 무지개 토토B 객체에 동일한 키가 두 번 이상 포함되면 모든 키/값 쌍이 유지됩니다.무지개 토토B공백을 보존하지 않고 객체 키의 순서를 보존하지 않으며 중복 객체 키를 유지하지 않습니다. 중복 키가 입력에 지정되면 마지막 값 만 유지됩니다.

일반적으로 대부분의 응용 프로그램은 무지개 토토 데이터를로 저장하는 것을 선호해야합니다.무지개 토토B, 객체 키 순서에 대한 레거시 가정과 같은 전문적인 요구가 없다면.

PostgreSQL데이터베이스 당 하나의 문자 세트 만 인코딩 할 수 있습니다. 따라서 데이터베이스 인코딩이 UTF8이 아닌 한 무지개 토토B 유형은 무지개 토토B 사양에 엄격하게 준수 할 수 없습니다.

RFC 7159 무지개 토토 스트링은로 표시된 유니 코드 이스케이프 시퀀스를 포함 할 수 있습니다\ uxxxx. 의 입력 함수에서무지개 토토유형, 유니 코드 이스케이프는 데이터베이스 인코딩에 관계없이 허용되며 구문 적 정확성 만 확인합니다 (즉, 4 개의 16 진수가 따르는 4 개의 16 진수 숫자는\ u). 그러나에 대한 입력 함수무지개 토토B더욱 엄격합니다 : 비 ASCII 문자에 대한 유니 코드 탈출을 방해합니다 (위U+007f) 데이터베이스 인코딩이 UTF8이 아닌 한. 그만큼무지개 토토B유형도 거부\ u0000PostgreSQL's텍스트type), 유니 코드 기본 다국어 평면 외부의 문자를 지정하기 위해 유니 코드 대리 쌍을 사용하는 것이 정확하다고 주장합니다. 유효한 유니 코드 이스케이프는 스토리지와 동등한 ASCII 또는 UTF8 문자로 변환됩니다.

참고 :많은 무지개 토토 처리 기능에 설명 된섹션 9.15유니 코드 탈출을 일반 문자로 변환하므로 입력이 유형이더라도 설명에도 설명 된 동일한 유형의 오류를 던집니다.무지개 토토not무지개 토토B. 사실무지개 토토입력 함수는 이러한 점검이 역사적 아티팩트로 간주 될 수 있지만, 비우프 8 데이터베이스 인코딩에서 무지개 토토B 유니 코드 탈출의 간단한 저장 (처리없이)을 허용합니다. 일반적으로 무지개 토토B에서 유니 코드 탈출을 비 UTF8 데이터베이스 인코딩과 혼합하는 것을 피하는 것이 가장 좋습니다.

텍스트 무지개 토토을 변환 할 때무지개 토토BRFC7159는 효과적으로 네이티브에 매핑됩니다PostgreSQL유형에 표시된대로표 8-23. 따라서 유효한 구성 요소에 대한 약간의 추가 제약이 있습니다무지개 토토B적용되지 않는 데이터무지개 토토기본 데이터 유형으로 표현할 수있는 내용에 대한 제한에 해당하는 초록의 유형 또는 무지개 토토에. 특히,무지개 토토B의 범위를 벗어난 숫자를 거부합니다PostgreSQL 숫자데이터 유형, while무지개 토토그렇지 않습니다. 이러한 구현 정의 제한은에 의해 허용됩니다.RFC7159. 그러나 실제로 이러한 문제는 무지개 토토을 대표하는 것이 일반적이므로 다른 구현에서 발생할 가능성이 훨씬 높습니다.번호IEEE 754 이중 정밀 부유 포인트로의 원시 유형 (whoRFC7159 명시 적으로 예상하고 허용합니다). 무지개 토토을 이러한 시스템과의 교환 형식으로 사용하는 경우 원래 저장된 데이터에 비해 숫자 정밀도를 잃을 위험이PostgreSQL고려해야합니다.

반대로, 테이블에 언급 된 바와 같이, 해당 무지개 토토 원시 유형의 입력 형식에 약간의 제한이 있습니다PostgreSQL타입.

표 8-23. 무지개 토토 원시 유형 및 해당PostgreSQLtype

무지개 토토 원시 유형 PostgreSQL타입 노트
String 텍스트 \ u0000데이터베이스 인코딩이 UTF8이 아닌 경우 비 ASCII 유니 코드 탈출과 마찬가지로 허용되지 않습니다.
번호 숫자 NANandInfinity값은 허용되지 않습니다
부울 부울 소문자 만trueandfalse철자가 허용됩니다
null (없음) SQLnull다른 개념입니다

8.14.1. 무지개 토토 입력 및 출력 구문

무지개 토토 데이터 유형의 입력/출력 구문은RFC 7159.

다음은 모두 유효합니다무지개 토토(또는무지개 토토B) 표현 :

- 간단한 스칼라/원시 값

앞에서 언급 한 바와 같이, 무지개 토토 값이 입력 된 다음 추가 처리없이 인쇄 할 때무지개 토토입력 한 것과 동일한 텍스트를 출력하는 동안무지개 토토Bwhitespace와 같은 의미 적으로 유의미한 세부 사항을 보존하지 않습니다. 예를 들어, 차이점에 주목하십시오.

선택 ' "bar": "baz", "balance": 7.77, "active": false':: json;

주목할만한 의미있는 세부 사항 중 하나는입니다.무지개 토토B, 숫자는 기본 행동에 따라 인쇄됩니다숫자타입. 실제로 이것은 숫자로 입력 된 숫자를 의미합니다.E표기법은 예를들없이 인쇄됩니다.

선택 ' ':: 무지개 토토, ' "reading": 1.230e-5':: 무지개 토토b;

그러나무지개 토토B이 예에서 볼 수 있듯이 평등 점검과 같은 목적으로 의미 적으로 중요하지 않더라도이 예에서 볼 수 있듯이 후행 분수 제로를 보존합니다.

8.14.2. 무지개 토토 문서 디자인 효과

데이터를 무지개 토토B으로 표현하는 것은 요구 사항이 유동적 인 환경에서 매력적인 기존 관계 데이터 모델보다 상당히 유연 할 수 있습니다. 동일한 응용 프로그램 내에서 두 가지 접근 방식이 공존하고 서로를 보완 할 수 있습니다."문서"(Datums) 테이블.

무지개 토토B 데이터는 테이블에 저장 될 때 다른 데이터 유형과 동일한 동시성 제어 고려 사항이 적용됩니다. 큰 문서를 저장하는 것이 실제로 가능하지만, 모든 업데이트는 전체 행에서로드 레벨 잠금을 취득합니다.

8.14.3. 무지개 토토B격리 및 존재

테스트격리의 중요한 기능입니다.무지개 토토B. 에 대한 평행 시설 세트가 없습니다.무지개 토토타입. 격리는 하나 의지 테스트합니다무지개 토토B문서가 다른 내부에 포함되어 있습니다. 이 예제는 언급 된대로 다음을 제외하고 참으로 반환됩니다.

- 간단한 스칼라/원시 값은 동일한 값 만 포함합니다.not

일반적인 원칙은 포함 된 객체가 포함 된 객체가 포함 된 객체에서 구조 및 데이터 내용과 관련하여 포함 된 객체와 일치해야한다는 것입니다. 그러나 배열 요소의 순서는 격리 일치를 할 때 중요하지 않으며 중복 배열 요소는 한 번만 효과적으로 고려됩니다.

구조가 일치해야한다는 일반적인 원칙에 대한 특별한 예외로서 배열에는 원시적 값이 포함될 수 있습니다.

-이 배열은 원시 문자열 값을 포함합니다.

무지개 토토B또한존재운영자, 이는 격리 주제의 변형 : 문자열이 (a로 주어진지 테스트합니다.텍스트value)무지개 토토B값. 이 예제는 언급 된대로 다음을 제외하고 참으로 반환됩니다.

- 문자열은 배열 요소로 존재합니다.

무지개 토토B 객체는 많은 키나 요소가있을 때 격리 또는 존재를 테스트하기 위해 배열보다 더 적합합니다. 배열과 달리 검색을 위해 내부적으로 최적화되어 있고 선형으로 검색 할 필요가 없기 때문입니다..

팁 :무지개 토토 격리가 중첩되어 있으므로 적절한 쿼리는 명시적인 하위 관류 선택을 건너 뛸 수 있습니다. 예를 들어, 우리에게가 있다고 가정합니다.doc최상위에 개체를 포함하는 열 대부분의 객체가 포함되어 있습니다태그하위 객체 배열이 포함 된 필드. 이 쿼리는 서브 객체가 두 가지를 포함하는 항목을 찾습니다."용어": "파리"and"용어": "음식"나타나고 외부의 이러한 키를 무시하면서 나타납니다.태그배열 :

웹 사이트에서 doc-> 'site_name'을 선택하십시오

하나는 같은 것을 성취 할 수 있습니다.

웹 사이트에서 doc-> 'site_name'을 선택하십시오

그러나 그 접근법은 덜 유연하고 종종 덜 효율적입니다.

반면에 무지개 토토 존재 연산자는 중첩되지 않았습니다. 무지개 토토 값의 최상위 레벨에서 지정된 키 또는 배열 요소 만 찾습니다.

다른 모든 무지개 토토 연산자 및 기능과 함께 다양한 격리 및 존재 연산자가 문서화되어 있습니다.섹션 9.15.

8.14.4. 무지개 토토B인덱싱

진 인덱스는 많은 수의 내에서 발생하는 키 또는 키/값 쌍을 효율적으로 검색하는 데 사용될 수 있습니다.무지개 토토B문서 (Datums). 두 진"운영자 클래스"다른 성능과 유연성 트레이드 오프를 제공합니다.

기본 진 연산자 클래스무지개 토토B@>, ?, ? &and? |운영자. (이 운영자가 구현 한 의미론에 대한 자세한 내용은 참조표 9-41.)이 연산자 클래스와 인덱스를 생성하는 예는 다음과 같습니다.

gin (jdoc)을 사용하여 API에서 색인 Idxgin 생성;

비 디펜트 진 운영자 클래스무지개 토토B_PATH_OPS인덱싱 지원@>운영자 만. 이 연산자 클래스로 인덱스를 만드는 예는 다음과 같습니다.

gin (jdoc jsonb_path_ops)을 사용하여 API에서 index idxginp 만들기;

문서화 된 스키마 정의와 함께 타사 웹 서비스에서 검색된 무지개 토토 문서를 저장하는 테이블의 예를 고려하십시오. 일반적인 문서는 다음과 같습니다.


우리는이 문서들을 명명 된 표에 저장합니다API, in무지개 토토B열이라는 열jdoc. 이 열에서 진 인덱스가 생성되면 다음과 같은 쿼리는 색인을 사용할 수 있습니다.

- 키 "회사"가 가치 "magnafone"을 가진 문서 찾기

그러나 연산자이기 때문에 다음과 같은 쿼리에는 인덱스를 사용할 수 없습니다?색인이 가능하며 색인 된 열에 직접 적용되지 않습니다jdoc:

- 키 "태그"에 키 또는 배열 요소가 포함 된 문서 찾기 "qui"

여전히 표현식 인덱스를 적절하게 사용하면 위의 쿼리는 인덱스를 사용할 수 있습니다. 내 특정 항목에 대한 쿼리 인 경우"태그"키는 일반적입니다. 이와 같이 인덱스를 정의하는 것이 가치가있을 수 있습니다 :

gin을 사용하여 API에서 index idxgintags 생성 ((jdoc -> 'tags');

지금,여기서jdoc-> 'tags'? 'qui'인덱스 가능한 연산자의 응용 프로그램으로 인식됩니다?색인 표현식jdoc-> 'tags'. (표현 인덱스에 대한 자세한 내용은 참조 할 수 있습니다.PostgreSQL : 문서 : 9.4 : 토토 꽁 머니식 색인.)

쿼리에 대한 또 다른 접근 방식은 다음과 같은 격리를 악용하는 것입니다.

- 키 "태그"가 배열 요소 "qui"를 포함하는 문서 찾기

jdoc열 에서이 쿼리를 지원할 수 있습니다. 그러나 그러한 색인은 모든 키의 사본과에을 저장합니다.jdoc열, 이전 예제의 표현식 인덱스는에서 발견 된 데이터 만 저장합니다.태그키. Simple-Index 접근 방식은 훨씬 유연하지만 (모든 키에 대한 쿼리를 지원하므로) 대상 표현식 인덱스는 단순한 인덱스보다 검색이 더 작고 빠를 수 있습니다..

비록무지개 토토B_PATH_OPS운영자 클래스는 쿼리 만 지원합니다@>운영자, 기본 연산자 클래스에 비해 주목할만한 성능 이점이 있습니다무지개 토토B_OPS. 에이무지개 토토B_PATH_OPS색인은 일반적으로 a보다 훨씬 작습니다.무지개 토토B_OPS동일한 데이터를 통해 인덱스를 표시하면 검색의 특이성이 특히 쿼리에 데이터에 자주 나타나는 키가 포함 된 경우 더 좋습니다. 따라서 검색 작업은 일반적으로 기본 연산자 클래스보다 더 잘 수행됩니다.

a의 기술적 차이무지개 토토B_OPS및 a무지개 토토B_PATH_OPSGin Index는 전자가 각 키에 대한 독립적 인덱스 항목과 데이터의 값을 생성하는 반면, 후자는 데이터의 각 값에 대해 인덱스 항목 만 생성한다는 것입니다..[1]기본적으로 각각무지개 토토B_PATH_OPS색인 항목은 값의 해시이며이를 이끌어냅니다. 예를 들어 색인"foo": "bar": "baz"foo, barBAZ해시 값으로. 따라서이 구조를 찾는 격리 쿼리는 매우 구체적인 색인 검색을 초래할 것입니다.foo열쇠로 나타납니다. 반면에, a무지개 토토B_OPSindex는 3 개의 색인 항목을 나타냅니다foo, barBAZ별도로; 그런 다음 격리 쿼리를 수행하려면 세 가지 항목 모두가 포함 된 행을 찾습니다.무지개 토토B_PATH_OPS검색, 특히 세 가지 색인 항목 중 하나를 포함하는 매우 많은 행이있는 경우

의 단점무지개 토토B_PATH_OPS접근 방식은 값을 포함하지 않는 무지개 토토 구조에 대한 인덱스 항목을 생성하지 않는다는 것입니다."a":. 이러한 구조가 포함 된 문서를 검색하는 경우 전체 인덱스 스캔이 필요합니다. 이는 매우 느립니다.무지개 토토B_PATH_OPS그러므로 종종 그러한 검색을 수행하는 응용 프로그램에 적합하지 않습니다.

무지개 토토B지원btreeandHash인덱스. 이는 일반적으로 완전한 무지개 토토 문서의 평등을 확인하는 것이 중요하다면 유용합니다.btree주문무지개 토토BDatums는 거의 관심이 거의 없지만 완전성은 다음과 같습니다.

개체  배열  부울  번호  String  NULL

n 쌍을 가진 객체  n -1 쌍을 가진 객체

n 요소가있는 배열  n -1 요소가있는 배열

쌍의 수가 같은 객체는 순서대로 비교됩니다.

키 -1, value-1, key-2 ...

객체 키는 스토리지 순서로 비교됩니다. 특히, 더 짧은 키가 더 긴 키 전에 저장되므로 :과 같은 직관적이지 않은 결과로 이어질 수 있습니다.

"aa": 1, "c": 1>  "b": 1, "d": 1

마찬가지로, 요소의 수가 같은 배열은 순서대로 비교됩니다.

element-1, 요소 -2 ...

원시 무지개 토토 값은 기본과 동일한 비교 규칙을 사용하여 비교됩니다PostgreSQL데이터 유형. 문자열은 기본 데이터베이스 Collation을 사용하여 비교됩니다.

노트

[1]

이 목적의 경우 용어"value"배열 요소가 포함되지만 무지개 토토 용어는 때때로 객체 내의 값과 구별되는 배열 요소를 고려합니다.