| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 토토 사이트 순위 : 문서 : 9.3 : fuzzystrmatch | PostgreSQL : 문서 : 9.3 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공 모듈 | 다음 | |
이 모듈은 다음을 구현합니다.h스토어데이터 단일 내에 키/값 쌍 세트를 저장하기 위한 유형포스트그레SQL값. 이것은 많은 속성이 있는 행과 같은 다양한 시나리오에서 유용합니다. 거의 검사되지 않거나 반구조화된 데이터입니다. 키와 값은 다음과 같습니다. 단순히 텍스트 문자열입니다.
의 텍스트 표현젠 토토, 사용됨 입력 및 출력의 경우 0개 이상을 포함합니다.키 = 값쌍은 쉼표로 구분됩니다. 일부 예:
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문자열 상수 처리에 대한 자세한 내용.
출력 시 큰따옴표는 항상 키와 값을 묶습니다. 꼭 필요하지 않은 경우.
다음에서 제공하는 연산자h스토어모듈은 다음에 표시됩니다.테이블 F-8, 함수표 F-9.
표 F-8.젠 토토연산자
| 운영자 | 설명 | 예 | 결과 |
|---|---|---|---|
| 젠 토토 - 텍스트 | 키 값 가져오기(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" |
| 젠 토토 ? 텍스트 | 그렇습니다h스토어키를 포함하고 있나요? | 'a=1'::젠 토토 ? 'a' | t |
| 젠 토토 ?& 텍스트[] | 그렇습니다젠 토토지정된 모든 항목 포함 열쇠? | 'a=1,b=2'::젠 토토 ?& 배열['a','b'] | t |
| 젠 토토 ?| 텍스트[] | 그렇습니다젠 토토지정된 항목 중 하나 포함 열쇠? | 'a=1,b=2'::젠 토토 ?| 배열['b','c'] | t |
| 젠 토토 @ 젠 토토 | 왼쪽 피연산자에 오른쪽이 포함되어 있나요? | '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'::텍스트 | "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" |
| 기록 #= 젠 토토 | 필드 교체기록일치 포함 의 값젠 토토 | 예시 섹션 참조 | |
| %% 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 |
젠 토토(텍스트[]) |
h스토어 | 구성젠 토토배열에서, 이는 키/값 배열이거나 2차원 배열일 수 있습니다. | 젠 토토(ARRAY['a','1','b','2']) || 젠 토토(ARRAY[['c','3'],['d','4']]) | a=1, b=2, c=3, d=4 |
젠 토토(텍스트[], 텍스트[]) |
젠 토토 | 구성젠 토토별도의 키와 값 배열 | 젠 토토(ARRAY['a','b'], 배열['1','2']) | "a"="1","b"="2" |
젠 토토(텍스트, 텍스트) |
젠 토토 | 단일 항목 만들기h스토어 | 젠 토토('a', 'b') | "a"="b" |
akeys(젠 토토) |
텍스트[] | 얻기젠 토토의 키를 배열로 | akeys('a=1,b=2') | a,b |
스키(젠 토토) |
텍스트 집합 | 얻기h스토어의 키 세트 | 스키('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값 | 젠 토토_to_json('"a key"=1, b=t, c=널, 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('"키"=1, b=t, c=널, d=12345, e=012345, f=1.234, g=2.345e+4') | "a 키": 1, "b": 참, "c": null, "d": 12345, "e": "012345", "f": 1.234, "g": 2.345e+4 |
슬라이스(젠 토토, 텍스트[]) |
젠 토토 | 의 하위 집합 추출h스토어 | 슬라이스('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) |
젠 토토 | 일치하는 키가 있는 쌍 삭제 | 삭제('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.
참고:함수
populate_record실제로 선언된 내용은모든 요소, 아님기록, 첫 번째 인수로 사용하지만 레코드가 아닌 유형을 거부합니다. 런타임 오류입니다.
h스토어GiST 및 GIN 인덱스 지원 기능이 있습니다.@, ?, ?&그리고?|연산자. 예를 들면:
GIST(h)를 사용하여 test젠 토토에서 hidx 인덱스 생성; GIN(h)을 사용하여 test젠 토토에서 인덱스 hidx를 생성합니다.
젠 토토또한 지원합니다브트리또는해시에 대한 색인=연산자. 이것은 허용합니다h스토어선언할 열고유또는 다음에 사용됨그룹 으로, 주문 기준또는독특식. 정렬 순서는 다음과 같습니다.젠 토토값은 특별히 유용하지는 않지만, 이러한 색인은 동등성 조회에 유용할 수 있습니다. 색인 생성 에 대한=비교는 다음과 같습니다.
BTREE(h)를 사용하여 test젠 토토에서 hidx 인덱스 생성; HASH(h)를 사용하여 test젠 토토에서 인덱스 hidx를 생성합니다.
키를 추가하거나 기존 키를 새 값으로 업데이트하세요:
업데이트 탭 SET h = h || 젠 토토('c', '3');
키 삭제:
UPDATE 탭 SET h = 삭제(h, 'k1');
변환 a기록에h스토어:
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행)
다음 값을 사용하여 기존 레코드 수정젠 토토:
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행)
그젠 토토유형, 본질적인 특성 때문에 자유도에는 다양한 키가 포함될 수 있습니다. 확인 중 유효한 키는 애플리케이션의 작업입니다. 다음 예 키를 확인하고 키를 가져오는 몇 가지 기술을 보여줍니다. 통계.
간단한 예:
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
....................PostgreSQL 9.0 기준,젠 토토다음을 사용합니다 이전 버전과 내부 표현이 다릅니다. 이 텍스트 이후 덤프/복원 업그레이드에 장애물이 없습니다. (덤프에 사용된) 표현은 변경되지 않습니다.
바이너리 업그레이드의 경우 상위 호환성은 새로운 코드가 이전 형식의 데이터를 인식하도록 하여 유지됩니다. 이 데이터를 처리할 때 약간의 성능 저하가 수반됩니다. 아직 새 코드로 수정되지 않았습니다. 강제로 가능해요 다음을 수행하여 테이블 열의 모든 값을 업그레이드합니다.업데이트다음과 같은 진술:
UPDATE 테이블 이름 SET 젠 토토col = 젠 토토col || '';
또 다른 방법은 다음과 같습니다:
ALTER TABLE 테이블 이름 ALTER 젠 토토col TYPE 젠 토토 USING 젠 토토col || '';
그테이블 변경메서드에는 테이블에 배타적 잠금을 설정했지만 테이블이 부풀어오르지는 않습니다. 이전 행 버전이 있는 테이블입니다.
올렉 바르투노프<oleg@sai.msu.su, 모스크바,
러시아 모스크바대학교
테오도르 시가예프<teodor@sigaev.ru, 모스크바,
Delta-Soft Ltd., 러시아
Andrew Gierth의 추가 개선 사항<andrew@tao11.riddles.org.uk,
영국