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

F.17. 스포츠 토토 - 스포츠 토토 키/값 데이터 유형#

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

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

F.17.1. 스포츠 토토외부 표현#

AN의 텍스트 표현스포츠 토토11610_11663 = value쉼표로 분리 된 쌍. 몇 가지 예 :

k = v
foo = bar, baz = 뭐든지
스포츠 토토;1-a스포츠 토토;= 스포츠 토토;무엇이든스포츠 토토;

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

an의 각 키스포츠 토토고유합니다. 당신이 선언한다면스포츠 토토중복 키가 있으면 하나만 저장됩니다스포츠 토토

선택 'a = 1, a = 2':: 스포츠 토토;
  스포츠 토토
---------
 스포츠 토토;a스포츠 토토;= 스포츠 토토;1스포츠 토토;

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

key = null

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

Note

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

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

F.17.2. 스포츠 토토운영자 및 기능#

스포츠 토토모듈에 표시됩니다테이블 F.6,의 함수테이블 F.7.

표 F.6. 스포츠 토토운영자

운영자

설명

예제

스포츠 토토 - 텍스트텍스트

주어진 키와 관련된 값을 반환합니다.NULL존재하지 않으면.

'a = x, b = y':: 스포츠 토토- 'a'x

스포츠 토토 - 텍스트 []텍스트 []

주어진 키와 관련된 값을 반환하거나NULL존재하지 않으면.

'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


표 F.7. 스포츠 토토기능

function

설명

example (s)

스포츠 토토(레코드) →스포츠 토토

CROUMST AN스포츠 토토레코드 또는 행에서.

스포츠 토토 (ROW (1,2))스포츠 토토;F1스포츠 토토;= 스포츠 토토;1스포츠 토토;, 스포츠 토토;F2스포츠 토토;= 스포츠 토토;2스포츠 토토;

스포츠 토토(텍스트 []) →스포츠 토토

CROUMST AN스포츠 토토키/값 배열 또는 2 차원 배열 일 수있는 배열에서.

스포츠 토토 (배열 [ 'a', '1', 'b', '2'])스포츠 토토;a스포츠 토토;= 스포츠 토토;1스포츠 토토;, 스포츠 토토;b스포츠 토토;= 스포츠 토토;2스포츠 토토;

스포츠 토토 (배열 [[ 'c', '3'], [ 'd', '4'])스포츠 토토;c스포츠 토토;= 스포츠 토토;3스포츠 토토;, 스포츠 토토;d스포츠 토토;= 스포츠 토토;4스포츠 토토;

스포츠 토토(텍스트 [], 텍스트 []) →스포츠 토토

CROUMST 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": "g": 2.345e+4

스포츠 토토_to_jsonb_loose(스포츠 토토) →JSONB

변환스포츠 토토to 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')

키 | 값
-----+-------
 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)


이러한 연산자 및 기능 외에도스포츠 토토유형을 위시 할 수 있으므로 연관 배열처럼 작동 할 수 있습니다. 유형의 단일 첨자텍스트지정할 수 있습니다. 키로 해석되며 해당 값이 가져 오거나 저장됩니다. 예를 들어,

테이블 생성 mytable (h 스포츠 토토);
mytable 값에 삽입 ( 'a = b, c = d');
mytable에서 h [ 'a']를 선택하십시오.
 시간
---
 비
(1 줄)

mytable set h [ 'c'] = 'new'업데이트;
mytable에서 h를 선택하십시오.
          시간
------------------------
 스포츠 토토;a스포츠 토토;= 스포츠 토토;b스포츠 토토;, "c"= "new"
(1 행)

구독 페치 반환NULL첨자가있는 경우NULL또는 그 키가에 존재하지 않습니다스포츠 토토. (따라서 구독 된 페치는와 크게 다르지 않습니다.-운영자.) 첨자가있는 경우 첨자 업데이트가 실패합니다NULL; 그렇지 않으면 해당 키의 값을 대체하여에 항목을 추가합니다.스포츠 토토키가 아직 존재하지 않는 경우.

F.17.3. 인덱스#

스포츠 토토에 대한 요지 및 진 인덱스 지원이 있습니다@, ?, ? &and? |운영자. 예를 들어:

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

gin (h);을 사용하여 test스포츠 토토에서 인덱스 HIDX를 만듭니다.

gist_스포츠 토토_opsGist Opclass는 비트 맵 서명으로 키/값 쌍 세트를 근사합니다. 선택적 정수 매개 변수Siglen시그니처 길이를 바이트로 결정합니다. 기본 길이는 16 바이트입니다. 서명 길이의 유효한 값은 1 내지 2024 바이트입니다. 서명이 길어 더 큰 인덱스 비용으로 더 정확한 검색 (인덱스의 작은 부분과 더 적은 힙 페이지를 스캔)으로 이어집니다.

서명 길이 32 바이트를 가진 인덱스 생성 예 :

GIST를 사용하여 test스포츠 토토에서 인덱스 HIDX 생성 (h GIST_스포츠 토토_OPS (siglen = 32));

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

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

해시 (h);을 사용하여 TestHstore에서 인덱스 HIDX를 만듭니다.

F.17.4. 예#

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

업데이트 탭 세트 H [ 'C'] = '3';

같은 일을하는 또 다른 방법은 다음과 같습니다.

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

한 번의 작업에서 여러 키를 추가하거나 변경하려면 연결 접근 방식이 첨자보다 효율적입니다.

업데이트 탭 세트 H = H || 스포츠 토토 (배열 [ 'q', 'w'], 배열 ['11 ','12 '];

키 삭제 :

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

변환레코드to an스포츠 토토:

테이블 테스트 작성 (Col1 Integer, Col2 Text, Col3 Text);
테스트 값에 삽입 (123, 'foo', 'bar');

test로 ts로 스포츠 토토 (t)를 선택하십시오.
                   스포츠 토토
----------------------------------------------------------
 "col1"= "123", "col2"= "foo", "col3"= "bar"
(1 행)

변환스포츠 토토사전 정의 된레코드유형 :

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

populate_record에서 *를 선택하십시오 (null :: test,
                              ' "col1"= "456", "col2"= "zzz"');
 col1 | col2 | col3
------+------+------
  456 | ZZZ |
(1 행)

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

테이블 테스트 생성 (COL1 Integer, Col2 Text, Col3 Text);
테스트 값에 삽입 (123, 'foo', 'bar');

선택 (r).
 col1 | col2 | col3
------+------+------
  123 | foo | 바즈
(1 행)

F.17.5. 통계#

the스포츠 토토유형은 본질적 자유로 인해 많은 다른 키를 포함 할 수 있습니다. 유효한 키를 확인하는 것은 응용 프로그램의 작업입니다. 다음 예제는 키를 확인하고 통계를 얻는 몇 가지 기술을 보여줍니다.

간단한 예 :

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

테이블 사용 :

select (각각 (h)). 키, (각 (h))로 테이블 통계를 만듭니다. test스포츠 토토의 값;

온라인 통계 :

키를 선택하고, count (*)에서
  (test스포츠 토토의 키)를 STAT로 선택하십시오
  키 별 그룹
  Count Desc, Key에 의한 주문;
    키 | 세다
----------+-------
 라인 |   883
 쿼리 |   207
 pos |   203
 노드 |   202
 공간 |   197
 상태 |   195
 공개 |   194
 제목 |   190
 org |   189
...................

F.17.6. 호환성#

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

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

업데이트 태블형 세트 Hstorecol = 스포츠 토토col || '';

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

스포츠 토토col을 사용한 스포츠 토토COL 유형 스포츠 토토 || '';

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

F.17.7. 변환#

|스포츠 토토언어 pl/perl 및 pl/python을 입력하십시오. PL/Perl의 확장자를라고합니다.스포츠 토토_plperland스포츠 토토_plperlu, 신뢰할 수 있고 신뢰할 수없는 pl/perl. 이 변환을 설치하고 함수를 만들 때 지정하면스포츠 토토값은 Perl 해시에 매핑됩니다. PL/Python의 확장을라고합니다.스포츠 토토_plpython3u. 사용하면스포츠 토토값은 Python 사전에 매핑됩니다.

주의

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

F.17.8. 저자#

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

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

Andrew Gierth의 추가 향상, 영국

수정 제출

문서에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면