지원되는 버전:현재 (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

F.17. 토토 꽁 머니 — 토토 꽁 머니 키/값 데이터 유형#

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

이 모듈은 고려됩니다.신뢰할 수 있는즉, 슈퍼유저가 아닌 사용자가 설치할 수 있습니다.만들기현재 데이터베이스에 대한 권한입니다.

F.17.1. 토토 꽁 머니외부 대표#

의 텍스트 표현토토 꽁 머니, 입력 및 출력에 사용되며 0개 이상 포함 = 쌍은 쉼표로 구분됩니다. 몇 가지 예:

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

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

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

SELECT 'a=1,a=2'::토토 꽁 머니;
  토토 꽁 머니
----------
 "a"="1"

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

키 = NULL

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

참고

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

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

F.17.2. 토토 꽁 머니연산자와 함수#

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

표 F.6. 토토 꽁 머니연산자

운영자

설명

토토 꽁 머니 - 텍스트텍스트

주어진 키와 연관된 값을 반환합니다. 또는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

h스토어 ?| 텍스트[]부울

그렇습니다토토 꽁 머니지정된 키가 포함되어 있습니까?

'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'::토토 꽁 머니 - ARRAY['a','b']"c"="3"

토토 꽁 머니 - h스토어토토 꽁 머니

오른쪽 피연산자의 쌍과 일치하는 왼쪽 피연산자 쌍을 삭제합니다.

'a=1, b=2, c=3'::토토 꽁 머니 - 'a=4, b=2'::토토 꽁 머니"a"="1", "c"="3"

모든 요소 #= h스토어모든 요소

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

ROW(1,3) #= 'f1=11'::토토 꽁 머니(11,3)

%% 토토 꽁 머니텍스트[]

개종자토토 꽁 머니교대되는 키와 값의 배열로.

%% 'a=foo, b=bar'::토토 꽁 머니a,foo,b,bar

%# h스토어텍스트[]

개종자토토 꽁 머니2차원 키/값 배열로.

%# 'a=foo, b=bar'::토토 꽁 머니a,foo,b,bar


표 F.7. 토토 꽁 머니기능

기능

설명

예제

토토 꽁 머니 ( 기록 ) → 토토 꽁 머니

구성토토 꽁 머니레코드 또는 행에서.

토토 꽁 머니(ROW(1,2))"f1"="1", "f2"="2"

토토 꽁 머니 ( 텍스트[] ) → 토토 꽁 머니

구성h스토어키/값 배열 또는 2차원 배열일 수 있는 배열에서.

토토 꽁 머니(ARRAY['a','1','b','2'])"a"="1", "b"="2"

토토 꽁 머니(ARRAY[['c','3'],['d','4']])"c"="3", "d"="4"

토토 꽁 머니 ( 텍스트[], 텍스트[] ) → h스토어

구성h스토어별도의 키 및 값 배열에서.

토토 꽁 머니(ARRAY['a','b'], ARRAY['1','2'])"a"="1", "b"="2"

토토 꽁 머니 ( 텍스트, 텍스트 ) → 토토 꽁 머니

단일 항목을 만듭니다토토 꽁 머니.

토토 꽁 머니('a', 'b')"a"="b"

아키 ( h스토어 ) → 텍스트[]

추출토토 꽁 머니의 키를 배열로.

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

스키 ( 토토 꽁 머니 ) → 텍스트 집합

추출토토 꽁 머니의 키 세트입니다.

스키('a=1,b=2')

a
비

아발스 ( 토토 꽁 머니 ) → 텍스트[]

추출토토 꽁 머니의 값을 배열로.

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

svals ( 토토 꽁 머니 ) → 텍스트 집합

추출토토 꽁 머니의 값을 세트로 표현합니다.

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

1
2

토토 꽁 머니_to_array ( 토토 꽁 머니 ) → 텍스트[]

추출h스토어의 키와 값을 교대하는 키와 값의 배열로 표현합니다.

토토 꽁 머니_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 문자열로 변환합니다.

이 함수는 다음과 같은 경우에 암시적으로 사용됩니다.토토 꽁 머니값이 다음으로 캐스팅됨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 문자열로 변환합니다.

이 함수는 다음과 같은 경우에 암시적으로 사용됩니다.토토 꽁 머니값이 다음으로 변환됨jsonb.

토토 꽁 머니_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"

각각 ( 토토 꽁 머니 ) → 레코드 집합 ( 텍스트, 텍스트 )

추출토토 꽁 머니의 키와 값을 레코드 세트로 표현합니다.

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

키 | 가치
------+-------
 | 1
 비 | 2

존재 ( 토토 꽁 머니, 텍스트 ) → 부울

그렇습니다토토 꽁 머니키를 포함하고 있나요?

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

정의됨 ( 토토 꽁 머니, 텍스트 ) → 부울

그렇습니다토토 꽁 머니비-를 포함함NULL키 값?

정의('a=NULL', 'a')f

삭제 ( 토토 꽁 머니, 텍스트 ) → 토토 꽁 머니

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

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

삭제 ( 토토 꽁 머니, 텍스트[] ) → 토토 꽁 머니

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

삭제('a=1,b=2,c=3', ARRAY['a','b'])"c"="3"

삭제 ( 토토 꽁 머니, 토토 꽁 머니 ) → 토토 꽁 머니

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

delete('a=1,b=2', 'a=4,b=2'::토토 꽁 머니)"a"="1"

populate_record ( 모든 요소, 토토 꽁 머니 ) → 모든 요소

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

populate_record(ROW(1,2), 'f1=42'::토토 꽁 머니)(42,2)


이러한 연산자 및 함수 외에도 다음의 값은토토 꽁 머니유형은 첨자를 사용하여 연관 배열처럼 작동할 수 있습니다. 유형의 단일 아래첨자만텍스트지정할 수 있습니다. 이는 키로 해석되고 해당 값을 가져오거나 저장합니다. 예를 들어,

CREATE TABLE mytable(h 토토 꽁 머니);
INSERT INTO mytable VALUES ('a=b, c=d');
SELECT h['a'] FROM mytable;
 시간
---
 비
(1줄)

UPDATE mytable SET h['c'] = 'new';
mytable에서 h를 선택합니다.
          시간
---------
 "a"="b", "c"="새"
(1행)

아래첨자 가져오기 반환NULL아래 첨자가 다음과 같은 경우NULL또는 해당 키가 다음에 존재하지 않습니다.토토 꽁 머니. (따라서 아래 첨자 가져오기는 다음과 크게 다르지 않습니다.-연산자.) 아래 첨자가 다음과 같은 경우 아래 첨자가 있는 업데이트가 실패합니다.NULL; 그렇지 않으면 해당 키의 값을 대체하고에 항목을 추가합니다.토토 꽁 머니키가 아직 존재하지 않는 경우.

F.17.3. 인덱스#

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

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

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

gist_토토 꽁 머니_opsGiST opclass는 키/값 쌍 세트를 비트맵 서명으로 근사화합니다. 선택적 정수 매개변수시글렌서명 길이를 바이트 단위로 결정합니다. 기본 길이는 16바이트입니다. 유효한 서명 길이 값은 1~2024바이트입니다. 서명이 길수록 더 큰 인덱스를 사용하는 대신 더 정확한 검색이 가능합니다(인덱스의 더 작은 부분과 더 적은 힙 페이지 검색).

서명 길이가 32바이트인 색인을 생성하는 예:

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

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

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

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

F.17.4. 예#

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

업데이트 탭 SET h['c'] = '3';

동일한 작업을 수행하는 또 다른 방법은 다음과 같습니다:

업데이트 탭 SET h = h || 토토 꽁 머니('c', '3');

한 번의 작업으로 여러 키를 추가하거나 변경해야 하는 경우 첨자보다 연결 방식이 더 효율적입니다.

업데이트 탭 SET h = h || 토토 꽁 머니(array['q', 'w'], array['11', '12']);

키 삭제:

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

변환 a기록토토 꽁 머니:

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

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

변환h스토어미리 정의된기록유형:

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.17.5. 통계#

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

간단한 예:

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

테이블 사용:

CREATE TABLE stat AS SELECT (각(h)).key, (각(h)).value FROM test토토 꽁 머니;

온라인 통계:

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

F.17.6. 호환성#

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

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

UPDATE 테이블 이름 SET 토토 꽁 머니col = 토토 꽁 머니col || '';

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

ALTER TABLE 테이블 이름 ALTER 토토 꽁 머니col TYPE 토토 꽁 머니 USING 토토 꽁 머니col || '';

테이블 변경메소드는 다음을 필요로 합니다.접속 독점테이블을 잠그지만 이전 행 버전으로 인해 테이블이 부풀어오르지는 않습니다.

F.17.7. 변환#

에 대한 변환을 구현하는 추가 확장을 사용할 수 있습니다.h스토어46031_46118토토 꽁 머니_plperl그리고토토 꽁 머니_plperlu, 신뢰할 수 있는 PL/Perl용. 이러한 변환을 설치하고 함수 생성 시 지정하면,토토 꽁 머니값은 Perl 해시에 매핑됩니다. PL/Python용 확장이 호출됩니다.토토 꽁 머니_plpython3u. 사용하시면,토토 꽁 머니값은 Python 사전에 매핑됩니다.

F.17.8. 저자#

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

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

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

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.