지원되는 버전:현재 (18) / 17 / 16 / 15 / 14 / 13
개발 버전:개발
지원되지 않는 버전:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.16. 토토 커뮤니티

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

F.16.1.토토 커뮤니티외부 대표

의 텍스트 표현토토 커뮤니티9445_9498 = 쌍은 쉼표로 구분됩니다. 몇 가지 예:

k = v
foo = 바, baz = 뭐든지
"1-a" = "아무거나"

쌍의 순서는 중요하지 않습니다(그리고 출력 시 재생산되지 않을 수도 있습니다). 쌍 사이 또는 주변의 공백=기호는 무시됩니다. 공백, 쉼표를 포함하는 큰따옴표 키와 값=s 또는s. 키나 값에 큰따옴표나 백슬래시를 포함하려면 백슬래시로 이스케이프 처리하세요.

각 키토토 커뮤니티고유합니다. 선언하는 경우토토 커뮤니티중복 키가 있으면 하나만 저장됩니다.토토 커뮤니티그리고 어느 것이 보관될 것인지에 대한 보장은 없습니다.

SELECT 'a=1,a=2'::토토 커뮤니티;
  토토 커뮤니티
----------
 "a"="1"

값(키는 제외)은 SQL일 수 있습니다.NULL. 예를 들면:

키 = NULL

NULL키워드는 대소문자를 구분하지 않습니다. 를 큰따옴표로 묶으세요.NULL일반 문자열로 처리"NULL".

참고:다음을 명심하십시오.h스토어입력에 사용되는 텍스트 형식이 적용됩니다.이전필요한 인용 또는 이스케이프. 전달하는 경우h스토어리터럴을 매개변수로 사용하는 경우 추가 처리가 필요하지 않습니다. 그러나 이를 따옴표로 묶은 리터럴 상수로 전달하는 경우 모든 작은따옴표 문자와 (설정에 따라standard_conforming_strings구성 매개변수) 백슬래시 문자를 올바르게 이스케이프해야 합니다. 참조섹션 4.1.2.1문자열 상수 처리에 대한 자세한 내용을 확인하세요.

출력 시 큰따옴표는 반드시 필요하지 않은 경우에도 항상 키와 값을 묶습니다.

F.16.2.h스토어연산자와 함수

다음에서 제공하는 연산자h스토어모듈은 다음에 표시됩니다.표 F-8, 함수표 F-9.

표 F-8.토토 커뮤니티연산자

운영자 설명 결과
토토 커뮤니티 - 텍스트 키 값 가져오기(NULL존재하지 않는 경우) 'a=x, b=y'::토토 커뮤니티 - 'a' x
토토 커뮤니티 - 텍스트[] 키 값 가져오기(NULL존재하지 않는 경우) 'a=x, b=y, c=z'::토토 커뮤니티 - ARRAY['c','a'] "z","x"
토토 커뮤니티 || 토토 커뮤니티 연결토토 커뮤니티s 'a=b, c=d'::토토 커뮤니티 || 'c=x, d=q'::토토 커뮤니티 "a"="b", "c"="x", "d"="q"
토토 커뮤니티 ? 텍스트 그렇습니다토토 커뮤니티키를 포함하고 있나요? 'a=1'::토토 커뮤니티 ? 'a' t
토토 커뮤니티 ?& 텍스트[] 그렇습니다토토 커뮤니티지정된 모든 키를 포함합니까? 'a=1,b=2'::토토 커뮤니티 ?& ARRAY['a','b'] t
토토 커뮤니티 ?| 텍스트[] 그렇습니다토토 커뮤니티지정된 키가 포함되어 있습니까? 'a=1,b=2'::토토 커뮤니티 ?| 배열['b','c'] t
h스토어 @ 토토 커뮤니티 왼쪽 피연산자에 오른쪽이 포함되어 있나요? 'a=b, b=1, c=NULL'::토토 커뮤니티 @ 'b=1' t
h스토어 <@ h스토어 왼쪽 피연산자가 오른쪽에 포함되어 있습니까? 'a=c'::토토 커뮤니티 <@ 'a=b, b=1, c=NULL' f
h스토어 - 텍스트 왼쪽 피연산자에서 키 삭제 'a=1, b=2, c=3'::토토 커뮤니티 - 'b'::text "a"="1", "c"="3"
토토 커뮤니티 - 텍스트[] 왼쪽 피연산자에서 키 삭제 'a=1, b=2, c=3'::토토 커뮤니티 - ARRAY['a','b'] "c"="3"
토토 커뮤니티 - 토토 커뮤니티 왼쪽 피연산자에서 일치하는 쌍 삭제 'a=1, b=2, c=3'::토토 커뮤니티 - 'a=4, b=2'::토토 커뮤니티 "a"="1", "c"="3"
기록 #= 토토 커뮤니티 필드 교체기록일치하는 값 포함토토 커뮤니티 예제 섹션 참조
%% 토토 커뮤니티 변환h스토어교대되는 키와 값의 배열로 %% 'a=foo, b=bar'::토토 커뮤니티 a,foo,b,bar
%# 토토 커뮤니티 변환토토 커뮤니티2차원 키/값 배열로 %# 'a=foo, b=bar'::토토 커뮤니티 a,foo,b,bar

참고:PostgreSQL 8.2 이전에는 봉쇄 연산자@그리고<@부름받았습니다@그리고~입니다. 이러한 이름은 계속 사용할 수 있지만 더 이상 사용되지 않으며 결국 제거될 예정입니다. 이전 이름은 이전에 핵심 기하학적 데이터 유형이 뒤따랐던 규칙과 반대입니다!

표 F-9.토토 커뮤니티기능

기능 반환 유형 설명 결과
토토 커뮤니티(레코드) 토토 커뮤니티 구성토토 커뮤니티레코드 또는 행에서 토토 커뮤니티(ROW(1,2)) f1=1,f2=2
토토 커뮤니티(텍스트[]) 토토 커뮤니티 구성토토 커뮤니티키/값 배열 또는 2차원 배열일 수 있는 배열에서 토토 커뮤니티(ARRAY['a','1','b','2']) || 토토 커뮤니티(ARRAY[['c','3'],['d','4']]) a=1, b=2, c=3, d=4
토토 커뮤니티(텍스트[], 텍스트[]) 토토 커뮤니티 구성토토 커뮤니티별도의 키 및 값 배열에서 토토 커뮤니티(ARRAY['a','b'], ARRAY['1','2']) "a"="1","b"="2"
토토 커뮤니티(텍스트, 텍스트) 토토 커뮤니티 단일 항목 만들기h스토어 토토 커뮤니티('a', 'b') "a"="b"
akeys(토토 커뮤니티) 텍스트[] 얻기h스토어의 키를 배열로 akeys('a=1,b=2') a,b
스키(토토 커뮤니티) 텍스트 집합 얻기토토 커뮤니티의 키 세트 스키('a=1,b=2')
a
비
avals(토토 커뮤니티) 텍스트[] 얻기토토 커뮤니티의 값을 배열로 avals('a=1,b=2') {1,2}
svals(토토 커뮤니티) 텍스트 집합 얻기토토 커뮤니티의 값 세트 svals('a=1,b=2')
1
2
토토 커뮤니티_to_array(토토 커뮤니티) 텍스트[] 얻기토토 커뮤니티의 키와 값을 교대하는 키와 값의 배열로 표시 토토 커뮤니티_to_array('a=1,b=2') a,1,b,2
토토 커뮤니티_to_matrix(토토 커뮤니티) 텍스트[] 얻기토토 커뮤니티의 키와 값을 2차원 배열로 표현 토토 커뮤니티_to_matrix('a=1,b=2') a,1,b,2
토토 커뮤니티_to_json(토토 커뮤니티) json 얻기토토 커뮤니티으로json값, null이 아닌 모든 값을 JSON 문자열로 변환 토토 커뮤니티_to_json('"a 키"=1, b=t, c=null, d=12345, e=012345, f=1.234, g=2.345e+4') "a 키": "1", "b": "t", "c": null, "d": "12345", "e": "012345", "f": "1.234", "g": "2.345e+4"
토토 커뮤니티_to_jsonb(토토 커뮤니티) jsonb 얻기토토 커뮤니티으로jsonb값, null이 아닌 모든 값을 JSON 문자열로 변환 토토 커뮤니티_to_jsonb('"a 키"=1, b=t, c=null, d=12345, e=012345, f=1.234, g=2.345e+4') "a 키": "1", "b": "t", "c": null, "d": "12345", "e": "012345", "f": "1.234", "g": "2.345e+4"
토토 커뮤니티_to_json_loose(토토 커뮤니티) json 얻기토토 커뮤니티으로json값이지만 숫자 값과 부울 값을 구별하여 JSON에서 인용되지 않도록 시도합니다. 토토 커뮤니티_to_json_loose('"a 키"=1, b=t, c=null, d=12345, e=012345, f=1.234, g=2.345e+4') "a 키": 1, "b": true, "c": null, "d": 12345, "e": "012345", "f": 1.234, "g": 2.345e+4
토토 커뮤니티_to_jsonb_loose(토토 커뮤니티) jsonb 얻기토토 커뮤니티으로jsonb값이지만 숫자 값과 부울 값을 구별하여 JSON에서 인용되지 않도록 시도합니다. 토토 커뮤니티_to_jsonb_loose('"a 키"=1, b=t, c=null, d=12345, e=012345, f=1.234, g=2.345e+4') "a 키": 1, "b": true, "c": null, "d": 12345, "e": "012345", "f": 1.234, "g": 2.345e+4
슬라이스(토토 커뮤니티, 텍스트[]) 토토 커뮤니티 의 하위 집합 추출토토 커뮤니티 슬라이스('a=1,b=2,c=3'::토토 커뮤니티, ARRAY['b','c','x']) "b"="2", "c"="3"
각(토토 커뮤니티) setof(키 텍스트, 값 텍스트) 얻기토토 커뮤니티의 키와 값 세트 각 항목에서 * 선택('a=1,b=2')
키 | 가치
------+-------
 | 1
 비 | 2
존재(토토 커뮤니티,text) 부울 그렇습니다토토 커뮤니티키를 포함하고 있나요? 존재('a=1','a') t
정의됨(토토 커뮤니티,text) 부울 그렇습니다토토 커뮤니티비-를 포함함NULL키 값? 정의('a=NULL','a') f
삭제(토토 커뮤니티,text) h스토어 일치하는 키가 있는 쌍 삭제 삭제('a=1,b=2','b') "a"="1"
삭제(토토 커뮤니티,text[]) 토토 커뮤니티 일치하는 키가 있는 쌍 삭제 삭제('a=1,b=2,c=3',ARRAY['a','b']) "c"="3"
삭제(토토 커뮤니티,토토 커뮤니티) 토토 커뮤니티 두 번째 인수와 일치하는 쌍을 삭제 삭제('a=1,b=2','a=4,b=2'::토토 커뮤니티) "a"="1"
populate_record(레코드,토토 커뮤니티) 기록 필드 교체기록일치하는 값 포함토토 커뮤니티 예시 섹션 참조

참고:함수토토 커뮤니티_to_json다음의 경우에 사용됩니다.h스토어값이 다음으로 변환됨json. 마찬가지로,토토 커뮤니티_to_jsonb다음의 경우에 사용됩니다.토토 커뮤니티값이 다음으로 변환됨jsonb.

참고:함수populate_record실제로 선언된 내용은모든 요소, 아님기록, 첫 번째 인수로 사용되지만 런타임 오류로 인해 레코드가 아닌 유형을 거부합니다.

F.16.3. 인덱스

토토 커뮤니티에 대한 GiST 및 GIN 인덱스 지원이 있습니다.@, ?, ?&그리고?|연산자. 예를 들면:

GIST(h)를 사용하여 test토토 커뮤니티에서 hidx 인덱스 생성;

GIN(h)을 사용하여 test토토 커뮤니티에서 인덱스 hidx를 생성합니다.

h스토어또한 지원합니다브트리또는해시에 대한 색인=연산자. 이것은 허용합니다토토 커뮤니티선언할 열고유또는 다음에 사용됨그룹별, 주문 기준또는독특식. 정렬 순서는 다음과 같습니다.토토 커뮤니티값은 특별히 유용하지는 않지만 이러한 색인은 동등성 조회에 유용할 수 있습니다. 다음에 대한 색인 생성=비교는 다음과 같습니다.

BTREE(h)를 사용하여 test토토 커뮤니티에서 hidx 인덱스 생성;

HASH(h)를 사용하여 test토토 커뮤니티에서 인덱스 hidx를 생성합니다.

F.16.4. 예

키를 추가하거나 기존 키를 새 값으로 업데이트하세요:

업데이트 탭 SET h = h || 토토 커뮤니티('c', '3');

키 삭제:

UPDATE 탭 SET h = 삭제(h, 'k1');

변환 a기록토토 커뮤니티:

CREATE TABLE 테스트(col1 정수, col2 텍스트, col3 텍스트);
테스트 값에 삽입(123, 'foo', 'bar');

SELECT 토토 커뮤니티(t) FROM 테스트 AS t;
                   토토 커뮤니티                    
--------------------------------
 "col1"="123", "col2"="foo", "col3"="바"
(1행)

변환토토 커뮤니티미리 정의된기록유형:

CREATE TABLE 테스트(col1 정수, col2 텍스트, col3 텍스트);

SELECT * FROM populate_record(null::테스트,
                              '"col1"="456", "col2"="zzz"');
 열1 | 열2 | col3 
------+------+------
  456 | zzz | 
(1행)

다음 값을 사용하여 기존 레코드 수정h스토어:

CREATE TABLE 테스트(col1 정수, col2 텍스트, col3 텍스트);
테스트 값에 삽입(123, 'foo', 'bar');

SELECT (r).* FROM (SELECT t #= '"col3"="baz"' AS r FROM test t) s;
 열1 | 열2 | col3 
------+------+------
  123 | 푸 | 바즈
(1행)

F.16.5. 통계

토토 커뮤니티유형은 본질적인 자유로움으로 인해 다양한 키를 포함할 수 있습니다. 유효한 키를 확인하는 것은 애플리케이션의 작업입니다. 다음 예에서는 키를 확인하고 통계를 얻는 여러 기술을 보여줍니다.

간단한 예:

SELECT * FROM Each('aaa=bq, b=NULL, ""=1');

테이블 사용:

SELECT (각(h)).key, (각(h)).value INTO stat FROM test토토 커뮤니티;

온라인 통계:

SELECT 키, 개수(*) FROM
  (SELECT (각(h)).key FROM test토토 커뮤니티) AS stat
  그룹별 키
  ORDER BY 카운트 DESC, 키;
    키 | 카운트
---------+-------
 라인 |   883
 쿼리 |   207
 위치 |   203
 노드 |   202
 공간 |   197
 상태 |   195
 공개 |   194
 제목 |   190
 조직 |   189
....................

F.16.6. 호환성

PostgreSQL 9.0 기준,토토 커뮤니티이전 버전과 다른 내부 표현을 사용합니다. 덤프에 사용된 텍스트 표현이 변경되지 않으므로 덤프/복원 업그레이드에 장애가 되지 않습니다.

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

UPDATE 테이블 이름 SET 토토 커뮤니티col = 토토 커뮤니티col || '';

또 다른 방법은 다음과 같습니다:

ALTER TABLE 테이블 이름 ALTER 토토 커뮤니티col TYPE 토토 커뮤니티 USING 토토 커뮤니티col || '';

테이블 변경메서드에는 테이블에 대한 배타적 잠금이 필요하지만 이전 행 버전으로 인해 테이블이 부풀어오르지는 않습니다.

F.16.7. 저자

올렉 바르투노프, 모스크바, 모스크바 대학교, 러시아

테오도르 시가예프, 모스크바, Delta-Soft Ltd., 러시아

Andrew Gierth의 추가 개선 사항, 영국