젠 토토 : 문서 : 9.6 : 젠 토토 9.6 | |||
---|---|---|---|
토토 캔 : 문서 : 9.6 : fuzzystrmatch | PostgreSQL : 문서 : 9.6 : 추가 제공 토토 사이트 추천 | 부록 F. 추가 공급 모듈 | 범퍼카 토토 : 문서 : 9.6 : Intagg |
이 모듈은를 구현합니다.사설 토토단일 내에 키/값 쌍의 세트를 저장하기위한 데이터 유형PostgreSQL값. 이것은 거의 검사되지 않는 많은 속성이있는 행 또는 반 구조화 된 데이터와 같은 다양한 시나리오에서 유용 할 수 있습니다. 키와 값은 단순히 텍스트 문자열입니다.
AN의 텍스트 표현사설 토토9411_9464키 = 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".
참고 :사설 토토텍스트 형식은 입력에 사용될 때 적용전필요한 인용 또는 탈출. 당신이 통과하는 경우사설 토토매개 변수를 통한 리터럴, 추가 처리가 필요하지 않습니다. 그러나 인용 된 문자 그대로 상수로 전달하는 경우 단일 쿼트 문자 및 (에 따라Standard_Conforming_strings구성 매개 변수) 백 슬래시 문자를 올바르게 피해야합니다. 보다섹션 4.1.2.1문자열 상수 처리에 대한 자세한 내용.
출력에 따라 이중 인용문은 항상 키와 값을 둘러싸고 있습니다.
테이블 F-8.사설 토토운영자
운영자 | 설명 | example | 결과 |
---|---|---|---|
사설 토토 - 텍스트 | key value get key (NULL존재하지 않으면) | 'a = x, b = y':: 사설 토토- 'a' | x |
사설 토토 - 텍스트 [] | 키 값 가져 오기 (NULL존재하지 않으면) | 'a = x, b = y, c = z':: 사설 토토- 배열 [ 'c', 'a'] | "z", "x" |
사설 토토 || 사설 토토 | Concatenate사설 토토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" |
레코드 #= 사설 토토 | 필드 교체레코드일치하는 값사설 토토 | 예제 섹션 참조 | |
%% 사설 토토 | Convert사설 토토교대 키와 값의 배열 | %% 'a = foo, b = bar':: 사설 토토 | a, foo, b, bar |
%# 사설 토토 | 변환사설 토토2 차원 키/가치 배열 | %# 'a = foo, b = bar':: 사설 토토 | a, foo, b, bar |
참고 :PostgreSQL 8.2 이전, 격리 연산자 이전@and<@|@and~각각. 이 이름은 여전히 사용할 수 있지만 더 이상 사용되지 않으며 결국 제거됩니다. 이전 이름은 이전에 컨벤션에서 반전 된 후 핵심 기하학적 데이터 유형이 뒤 따릅니다!
테이블 F-9.사설 토토기능
기능 | 반환 유형 | 설명 | example | 결과 |
---|---|---|---|---|
사설 토토 (레코드) |
사설 토토 | 구성사설 토토레코드 또는 행에서 | 사설 토토 (ROW (1,2)) | f1 = 1, f2 = 2 |
사설 토토 (text []) |
사설 토토 | 건설사설 토토키/값 배열이거나 2 차원 배열 일 수있는 배열에서 | 사설 토토 (배열 [ 'a', '1', 'b', '2']) || 사설 토토 (배열 [[ 'c', '3'], [ 'd', '4']) | a = 1, b = 2, c = 3, d = 4 |
사설 토토 (텍스트 [], 텍스트 []) |
사설 토토 | 건설사설 토토별도의 키 및 값 배열에서 | 사설 토토 (배열 [ 'a', 'b'], 배열 [ '1', '2']) | "a"= "1", "b"= "2" |
사설 토토 (텍스트, 텍스트) |
사설 토토 | 단일 항목 만들기사설 토토 | 사설 토토 ( 'a', 'b') | "a"= "b" |
akeys (사설 토토) |
텍스트 [] | get사설 토토의 열쇠로 배열 | akeys ( 'a = 1, b = 2') | a, b |
Skeys (사설 토토) |
텍스트 설정 | get사설 토토의 키는 세트로 | Skeys ( 'a = 1, b = 2') |
a 비 |
avals (사설 토토) |
텍스트 [] | get사설 토토의 값으로 배열 | avals ( 'a = 1, b = 2') | 1,2 |
SVALS (사설 토토) |
텍스트 설정 | get사설 토토의 값 세트 | svals ( 'a = 1, b = 2') |
1 2 |
사설 토토_to_array (사설 토토) |
텍스트 [] | get사설 토토'의 키와 값은 교대 키와 값의 배열로서 | 사설 토토_to_array ( 'a = 1, b = 2') | a, 1, b, 2 |
사설 토토_to_matrix (사설 토토) |
텍스트 [] | get사설 토토의 키와 값은 2 차원 배열로 | 사설 토토_to_matrix ( 'a = 1, b = 2') | a, 1, b, 2 |
사설 토토_to_json (사설 토토) |
JSON | get사설 토토asJSON값, 모든 비 널 값을 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 | get사설 토토asJSONB값, 모든 비 널 값을 JSON 문자열로 변환 | 사설 토토_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 | get사설 토토asJSON값이지만 숫자 및 부울 값을 구별하여 JSON에서 인용되지 않습니다 | 사설 토토_to_json_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 | get사설 토토asJSONB값, 그러나 숫자와 부울 값을 구별하려고 시도하여 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 |
슬라이스 (사설 토토, text []) |
사설 토토 | an의 하위 집합 추출사설 토토 | 슬라이스 ( 'a = 1, b = 2, c = 3':: 사설 토토, 배열 [ 'b', 'c', 'x']) | "b"= "2", "c"= "3" |
각 (사설 토토) |
setof (키 텍스트, 값 텍스트) | get사설 토토의 키와 값 세트로 | 선택 * 각각 ( 'a = 1, b = 2') |
키 | 값 -----+------- A | 1 B | 2 |
존재 (사설 토토, text) |
부울 | do사설 토토키 포함? | 존재 ( 'a = 1', 'a') | t |
정의 (사설 토토, text) |
부울 | do사설 토토비 포함NULL키에 대한 가치? | 정의 ( 'a = null', 'a') | F |
삭제 (사설 토토, text) |
사설 토토 | 일치하는 키와 쌍 삭제 | 삭제 ( 'a = 1, b = 2', 'b') | "A"= "1" |
삭제 (사설 토토, text []) |
사설 토토 | 일치하는 키가있는 쌍 삭제 | 삭제 ( 'a = 1, b = 2, c = 3', 배열 [ 'a', 'b'] | "C"= "3" |
삭제 (사설 토토, 사설 토토) |
사설 토토 | 두 번째 인수의 쌍과 일치하는 쌍 삭제 | 삭제 ( 'a = 1, b = 2', 'a = 4, b = 2':: 사설 토토) | "a"= "1" |
popule_record (record, 사설 토토) |
레코드 | 필드 교체레코드일치하는 값사설 토토 | 예제 섹션 참조 |
참고 :함수
사설 토토_to_json
사설 토토값은JSON. 비슷하게,사설 토토_TO_JSONB
사설 토토값은JSONB.
참고 :함수
popule_record
실제로로 선언되었습니다.Anylement, 아님레코드, 첫 번째 인수로서 런타임 오류가있는 비 레코드 유형을 거부합니다.
사설 토토gist and gin index 지원이 있습니다@, ?, ? &and? |운영자. 예를 들어:
GIST (H)를 사용하여 TestHstore에서 인덱스 HIDX 작성; gin (h);을 사용하여 test사설 토토에서 인덱스 HIDX를 만듭니다.
사설 토토지원btree또는HASH=연산자. 이것은 허용사설 토토선언 될 열고유 한또는그룹 by, 주문 by또는별개의표현. 정렬 주문사설 토토값은 특별히 유용하지 않지만 이러한 인덱스는 동등성 조회에 유용 할 수 있습니다. 인덱스 작성=다음과 같이 비교 :
btree (h)를 사용하여 test사설 토토에서 인덱스 HIDX 생성; 해시 (h);을 사용하여 TestHstore에서 인덱스 HIDX를 만듭니다.
키를 추가하거나 새로운 값으로 기존 키를 업데이트하십시오.
업데이트 탭 세트 H = H || 사설 토토 ( 'c', '3');
키 삭제 :
업데이트 탭 세트 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 행)
the사설 토토유형은 본질적인 자유로 인해 많은 다른 키를 포함 할 수 있습니다. 유효한 키를 확인하는 것은 응용 프로그램의 작업입니다. 다음 예제는 키를 확인하고 통계를 얻는 몇 가지 기술을 보여줍니다.
간단한 예 :
select * 각각 ( 'aaa = bq, b = null, ""= 1');
테이블 사용 :
select (각 (h)). 키, (각 (h)). test사설 토토에서 STAT 로의 값;.
온라인 통계 :
Key, Count (*)를 선택하십시오 (test사설 토토의 키)를 STAT로 선택하십시오 키 별 그룹 Count Desc, Key에 의한 주문; 키 | 세다 ----------+------- 라인 | 883 쿼리 | 207 pos | 203 노드 | 202 공간 | 197 상태 | 195 공개 | 194 제목 | 190 org | 189 ...................
29198_29222사설 토토이전 버전과 다른 내부 표현을 사용합니다. 이것은 텍스트 표현 (덤프에서 사용)이 변하지 않기 때문에 덤프/복원 업그레이드에 대한 장애물을 제시하지 않습니다.
이진 업그레이드의 경우 새 코드가 구식 데이터를 인식하도록하여 상향 호환성을 유지합니다. 이는 새 코드로 아직 수정되지 않은 데이터를 처리 할 때 약간의 성능 페널티가 수반됩니다. AN을 수행하여 테이블 열에서 모든 값의 업그레이드를 강요 할 수 있습니다업데이트다음과 같이 진술 :
업데이트 태블니 이름 세트 사설 토토col = 사설 토토col || '';
그렇게하는 또 다른 방법은 다음과 같습니다.
사설 토토col을 사용한 사설 토토COL 유형 사설 토토 || '';
theAlter Table메소드가 필요합니다액세스 독점테이블을 잠그지 만 오래된 행 버전으로 테이블을 팽창 시키지는 않습니다.
|사설 토토언어 pl/perl 및 pl/python을 입력하십시오. PL/Perl의 확장자를라고합니다.사설 토토_plperl및사설 토토_plperlu, 신뢰할 수 있고 신뢰할 수없는 pl/perl. 이 변환을 설치하고 함수를 만들 때 지정하면사설 토토값은 Perl 해시에 매핑됩니다. PL/Python의 확장을라고합니다.사설 토토_plpythonu, 사설 토토_plpython2u및사설 토토_plpython3u(참조PostgreSQL : 문서 : 9.6 : 롤 토토 2 vs. 롤 토토 3PL/Python 명명 규칙). 사용하면사설 토토값은 Python 사전에 매핑되었습니다.
주의 |
변환 확장 기능을 동일한 스키마에에 설치하는 것이 좋습니다사설 토토. 그렇지 않으면 Transform Extension의 스키마에 적대적인 사용자가 정의한 개체가 포함 된 경우 설치 시간 보안 위험이 있습니다. |
Oleg Bartunov<oleg@sai.msu.su
, 러시아 모스크바 대학교 모스크바
Teodor Sigaev<teodor@sigaev.ru
, Moscow, Delta-Soft Ltd., 러시아
Andrew Gierth의 추가 향상<andrew@tao11.riddles.org.uk
, 영국