지원되는 버전 :현재 (17)16 / 15 / 14 / 13
개발 버전 :Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.16. 토토 핫

이 모듈은를 구현합니다.토토 핫단일 내에 키/값 쌍 세트를 저장하기위한 데이터 유형PostgreSQL값. 이것은 거의 검사되지 않는 많은 속성이있는 행 또는 반 구조화 된 데이터와 같은 다양한 시나리오에서 유용 할 수 있습니다.

이 모듈이 고려됩니다신뢰할 수있는Create현재 데이터베이스의 권한.

F.16.1. 토토 핫외부 표현

an의 텍스트 표현토토 핫10232_10282 => value쉼표로 분리 된 쌍. 몇 가지 예 :

k => v

쌍의 순서는 중요하지 않으며 (출력시 재현되지 않을 수 있음). 쌍 사이 또는 주변 사이의 공백=>표시가 무시됩니다. whitespace, commas,를 포함하는 이중 쿼트 키 및 값=s 또는s. 키 또는 값에 이중 견적 또는 백 슬래시를 포함하려면 백 슬래시로 탈출하십시오.

an의 각 키토토 핫고유합니다. 당신이 선언한다면토토 핫중복 키가 있으면 하나만 저장됩니다토토 핫그리고 어떤 보관할 것인지에 대한 보장은 없습니다 :

선택 'a => 1, a => 2':: 토토 핫;

값 (키가 아님)은 SQL 일 수 있습니다null. 예를 들어:

key => null

thenull키워드는 사례에 민감합니다. 두 배의 ~null일반 문자열로 취급하려면null.

Note

토토 핫텍스트 형식은 입력에 사용될 때 적용필요한 인용 또는 탈출. 당신이 통과하는 경우토토 핫매개 변수를 통한 리터럴이면 추가 처리가 필요하지 않습니다. 그러나 인용 된 문자 그대로 상수로 전달하는 경우 단일 쿼트 문자 및 (에 따라Standard_Conforming_strings구성 매개 변수) 백 슬래시 문자를 올바르게 피해야합니다. 보다섹션 4.1.2.1문자열 상수 처리에 대한 자세한 내용.

출력에 따라 이중 인용문은 항상 키와 값을 둘러싸고 있습니다.

F.16.2. 토토 핫운영자 및 기능

토토 핫11214_1foo |3테이블 F.7, 함수테이블 F.8.

표 F.7. 토토 핫연산자

운영자

설명

예제

토토 핫 -> 텍스트텍스트

주어진 키와 관련된 값을 반환합니다.nullfoo |07_foo |22

'a => x, b => y':: 토토 핫-> 'a'x

토토 핫 -> 텍스트 []텍스트 []

주어진 키와 관련된 값을 반환하거나nullfoo |07_foo |22

'a => x, b => y, c => z':: 토토 핫-> 배열 [ 'c', 'a']"z", "x"

토토 핫 || 토토 핫토토 핫

두 가지를 연결합니다토토 핫s.

'a => b, c => d':: 토토 핫 || 'c => x, d => q':: 토토 핫"a"=> "b", "c"=> "x", "d"=> "q"

토토 핫 ? 텍스트부울

do토토 핫키 포함?

'a => 1':: 토토 핫? '에이't

토토 핫 ? & 텍스트 []부울

do토토 핫지정된 모든 키를 포함합니까?

'a => 1, b => 2':: 토토 핫? & array [ 'a', 'b']t

토토 핫 ? | 텍스트 []부울

do토토 핫지정된 키를 포함합니까?

'a => 1, b => 2':: 토토 핫? | 배열 [ 'b', 'c']t

토토 핫 @> 토토 핫부울

왼쪽 피연산자가 맞습니까?

'a => b, b => 1, c => null':: 토토 핫 @> 'b => 1't

토토 핫 <@ 토토 핫부울

왼쪽 피연산자가 오른쪽에 포함되어 있습니까?

'a => c':: 토토 핫 <@ 'a => b, b => 1, c => null'f

토토 핫 - 텍스트토토 핫

왼쪽 피연산자에서 키를 삭제합니다.

'a => 1, b => 2, c => 3':: 토토 핫- 'b':: text"a"=> "1", "c"=> "3"

토토 핫 - 텍스트 []토토 핫

왼쪽 피연산자에서 키를 삭제합니다.

'a => 1, b => 2, c => 3':: 토토 핫- 배열 [ 'a', 'b']"C"=> "3"

토토 핫 - 토토 핫토토 핫

오른쪽 피연산자의 쌍을 일치시키는 왼쪽 피연산자에서 쌍 쌍을 삭제합니다.

'a => 1, b => 2, c => 3':: 토토 핫- 'a => 4, b => 2':: 토토 핫"a"=> "1", "c"=> "3"

Anylement #= 토토 핫Anylement

왼쪽 피연산자의 필드 (복합 유형이어야 함)의 필드를 일치하는 값으로토토 핫.

행 (1,3) #= 'f1 => 11':: 토토 핫(11,3)

%% 토토 핫텍스트 []

변환토토 핫교대 키와 값의 배열로.

%% 'a => foo, b => bar':: 토토 핫a, foo, b, bar

%# 토토 핫텍스트 []

변환토토 핫2 차원 키/값 배열로.

%# 'a => foo, b => bar':: 토토 핫a, foo, b, bar


Note

Postgresql 8.2 이전, 격리 연산자 이전@>and<@@and~각각. 이 이름은 여전히 ​​사용할 수 있지만 더 이상 사용되지 않으며 결국 제거됩니다.

테이블 F.8. 토토 핫기능

기능

설명

예제

토토 핫 ( 레코드) →토토 핫

Constructs an토토 핫레코드 또는 행에서.

토토 핫 (ROW (1,2))"F1"=> "1", "F2"=> "2"

토토 핫 ( 텍스트 []) →토토 핫

Constructs an토토 핫키/값 배열 또는 2 차원 배열 일 수있는 배열에서.

토토 핫 (배열 [ 'a', '1', 'b', '2']"a"=> "1", "b"=> "2"

토토 핫 (배열 [[ 'c', '3'], [ 'd', '4'])"c"=> "3", "d"=> "4"

토토 핫 ( 텍스트 [], 텍스트 []) →토토 핫

Constructs an토토 핫별도의 키 및 값 배열에서.

토토 핫 (배열 [ 'a', 'b'], 배열 [ '1', '2'])"a"=> "1", "b"=> "2"

토토 핫 ( 텍스트, 텍스트) →토토 핫

단일 항목을 만듭니다토토 핫.

토토 핫 ( 'a', 'b')"A"=> "B"

akeys ( 토토 핫) →텍스트 []

추출 AN토토 핫의 열쇠는 배열로.

akeys ( 'a => 1, b => 2')a, b

Skeys ( 토토 핫) →텍스트 설정

추출 AN토토 핫의 키는 세트입니다.

Skeys ( 'a => 1, b => 2')

a

avals ( 토토 핫) →텍스트 []

추출 AN토토 핫의 배열 값.

avals ( 'a => 1, b => 2'){1,2}

svals ( 토토 핫) →텍스트 설정

추출 AN토토 핫의 값 세트로.

svals ( 'a => 1, b => 2')

1
2

토토 핫_to_array ( 토토 핫) →텍스트 []

추출 AN토토 핫의 키와 값은 교대 키와 값의 배열로서 값입니다.

토토 핫_to_array ( 'a => 1, b => 2')a, 1, b, 2

토토 핫_to_matrix ( 토토 핫) →텍스트 []

추출 AN토토 핫의 열쇠와 값은 2 차원 배열로서.

토토 핫_to_matrix ( 'a => 1, b => 2')a, 1, b, 2

토토 핫_to_json ( 토토 핫) →JSON

변환토토 핫aJSON값, 모든 비 널 값을 JSON 문자열로 변환합니다.

이 함수는 암시 적으로 사용됩니다토토 핫값은JSON.

토토 핫_to_json ( ' "키"=> 1, b => t, c => null, d => 12345, e => 012345, f => 1.234, g => 2.345e+4')"키": "1", "B": "T", "C": NULL, "D": "12345", "E": "012345", "F": "1.234", "G": "2.345E+4"

토토 핫_to_jsonb ( 토토 핫) →JSONB

변환토토 핫aJSONB값, 모든 비 널 값을 JSON 문자열로 변환합니다.

이 함수는 암시 적으로 사용됩니다토토 핫값은JSONB.

토토 핫_to_jsonb ( ' "키"=> 1, b => t, c => null, d => 12345, e => 012345, f => 1.234, g => 2.345e+4'))"키": "1", "B": "T", "C": NULL, "D": "12345", "E": "012345", "F": "1.234", "G": "2.345E+4"

토토 핫_to_json_loose ( 토토 핫) →JSON

변환토토 핫aJSON값이지만 숫자 및 부울 값을 구별하려고 시도하여 JSON에서는 인용되지 않습니다.

토토 핫_to_json_sson_loose ( '키 "=> 1, b => t, c => null, d => 12345, e => 012345, f => 1.234, g => 2.345e+4')"키": 1, "b": true, "c": null, "d": 12345, "e": "012345", "f": 1.234, "g": 2.345e+4

토토 핫_to_jsonb_loose ( 토토 핫) →JSONB

변환토토 핫aJSONB값이지만 숫자 및 부울 값을 구별하려고 시도하여 JSON에서는 인용되지 않습니다.

토토 핫_to_jsonb_loose ( ' "키"=> 1, b => t, c => null, d => 12345, e => 012345, f => 1.234, g => 2.345e+4'))"키": 1, "b": true, "c": null, "d": 12345, "e": "012345", "f": 1.234, "g": 2.345e+4

슬라이스 ( 토토 핫, 텍스트 []) →토토 핫

an의 하위 집합 추출토토 핫지정된 키 만 포함합니다.

슬라이스 ( 'a => 1, b => 2, c => 3':: 토토 핫, 배열 [ 'b', 'c', 'x'])"b"=> "2", "c"=> "3"

( 토토 핫) →Setof Record ( 텍스트, value 텍스트 )

추출 AN토토 핫의 키와 값은 레코드 세트로

선택 * 각각 ( 'a => 1, b => 2')

키 | 값

존재 ( 토토 핫, 텍스트) →부울

do토토 핫키 포함?

존재 ( 'a => 1', 'a')t

정의 ( 토토 핫, 텍스트) →부울

do토토 핫비 포함null키에 대한 가치?

정의 ( 'a => null', 'a')f

삭제 ( 토토 핫, 텍스트) →토토 핫

일치 키와 쌍을 삭제합니다.

삭제 ( 'a => 1, b => 2', 'b')"a"=> "1"

삭제 ( 토토 핫, 텍스트 []) →토토 핫

일치하는 키와 쌍을 삭제합니다.

삭제 ( 'a => 1, b => 2, c => 3', 배열 [ 'a', 'b']"C"=> "3"

삭제 ( 토토 핫, 토토 핫) →토토 핫

두 번째 인수에 일치하는 쌍을 삭제합니다.

삭제 ( 'a => 1, b => 2', 'a => 4, b => 2':: 토토 핫)"a"=> "1"

popule_record ( Anylement, 토토 핫) →Anylement

왼쪽 피연산자의 필드 (복합 유형이어야 함)의 필드를 일치하는 값으로토토 핫.

popule_record (행 (1,2), 'f1 => 42':: 토토 핫)(42,2)


F.16.3. 인덱스

토토 핫GIST 및 GIN Index 지원이 있습니다.@>, ?, ? &and? |연산자. 예를 들어:

GIST (H)를 사용하여 Test토토 핫에서 인덱스 HIDX 생성;

gist_토토 핫_opsgist opclass는 비트 맵 서명으로 키/값 쌍 세트를 근사화합니다. 선택적 정수 매개 변수Siglen시그니처 길이를 바이트로 결정합니다. 기본 길이는 16 바이트입니다.

서명 길이 32 바이트를 가진 그러한 색인 생성 예 :

GIST를 사용하여 test토토 핫에서 인덱스 HIDX 생성 (h gist_토토 핫_ops (siglen = 32));

토토 핫지원btree또는Hash=운영자. 이것은 허용토토 핫선언 될 열고유 한또는 사용될그룹 by, 주문 by또는별도의표현. 정렬 주문토토 핫값은 특별히 유용하지 않지만 이러한 인덱스는 동등한 조회에 유용 할 수 있습니다. 인덱스 작성=다음과 같이 비교 :

btree (h)를 사용하여 test토토 핫에서 인덱스 HIDX 생성;

F.16.4. 예

키를 추가하거나 새로운 값으로 기존 키를 업데이트하십시오.

업데이트 탭 세트 H = H || 토토 핫 ( 'c', '3');

키 삭제 :

업데이트 탭 세트 H = 삭제 (h, 'k1');

변환레코드to an토토 핫:

테이블 테스트 생성 (COL1 Integer, Col2 Text, Col3 Text);

변환토토 핫사전 정의 된레코드유형 :

테이블 테스트 생성 (Col1 Integer, Col2 Text, Col3 Text);

AN을 사용하여 기존 레코드를 수정합니다토토 핫:

테이블 테스트 생성 (Col1 Integer, Col2 Text, Col3 Text);

F.16.5. 통계

the토토 핫유형은 본질적 자유로 인해 다양한 키를 포함 할 수 있습니다. 유효한 키를 확인하는 것은 응용 프로그램의 작업입니다.

간단한 예 :

선택 * 각각 ( 'aaa => bq, b => null, ""=> 1');

테이블 사용 :

select (각 (h)). 키, (각 (h)). test토토 핫에서 stat 로의 값;.

온라인 통계 :

Key, Count (*)를 선택하십시오

F.16.6. 호환성

PostgreSQL 9.0,.토토 핫이전 버전과 다른 내부 표현을 사용합니다. 이것은 텍스트 표현 (덤프에서 사용)이 변하지 않기 때문에 덤프/복원 업그레이드에 대한 장애물을 제시하지 않습니다.

이진 업그레이드의 경우 새 코드가 구식 데이터를 인식하도록하여 상향 호환성을 유지합니다. 이는 새 코드로 아직 수정되지 않은 데이터를 처리 할 때 약간의 성능 페널티가 수반됩니다.업데이트다음과 같이 진술 :

업데이트 태블니 이름 세트 토토 핫col = 토토 핫col || '';

그렇게하는 또 다른 방법은 다음과 같습니다.

ALTER TABLE TABLENAME ALTER HSTORECOL 유형 HSTORE HSTORECOL || '';

theAlter Table메소드가 필요합니다액세스 독점테이블에 잠그지 만 오래된 행 버전으로 테이블을 팽창 시키지는 않습니다.

F.16.7. 변환

|토토 핫언어 PL/PERL 및 PL/PYTHON을 입력하십시오. PL/Perl의 확장자를라고합니다.토토 핫_plperland토토 핫_plperlu, 신뢰할 수 있고 신뢰할 수없는 pl/perl. 이 변환을 설치하고 함수를 만들 때 지정하면토토 핫값은 Perl 해시에 매핑됩니다. PL/Python의 확장을라고합니다.토토 핫_plpythonu, 토토 핫_plpython2u토토 핫_plpython3u(참조섹션 45.1pl/python naming 컨벤션의 경우). 사용하면토토 핫값은 Python 사전에 매핑됩니다.

주의

변환 확장 기능을 동일한 스키마에에 설치하는 것이 좋습니다토토 핫. 그렇지 않으면 Transform Extension의 스키마에 적대적인 사용자가 정의한 개체가 포함 된 경우 설치 시간 보안 위험이 있습니다.

F.16.8. 저자

Oleg Bartunov, 러시아 모스크바 대학교 모스크바

Teodor Sigaev, Moscow, Delta-Soft Ltd., 러시아

Andrew Gierth의 추가 향상, 영국

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면