개발 버전 :Devel
지원되지 않는 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

8.15. 윈 토토#

PostgreSQL표의 열을 가변 길이의 다차원 윈 토토로 정의 할 수 있습니다. 내장 또는 사용자 정의 기본 유형, 열거 유형, 복합 유형, 범위 유형 또는 도메인의 윈 토토.

8.15.1. 윈 토토 유형 선언#

윈 토토 유형의 사용을 설명하려면이 표를 만듭니다.

테이블 생성 sal_emp (

표시된대로, 윈 토토 데이터 유형은 사각형 브래킷을 추가하여 명명됩니다 ([]) 윈 토토 요소의 데이터 유형 이름으로. 위의 명령은라는 테이블을 만듭니다.sal_emp유형 열이있는텍스트 (이름), 1 차원 유형의 1 차원 윈 토토정수 (pay_by_quarter)는 분기 별 직원의 급여와 2 차원 윈 토토을 나타내는텍스트 (일정), 직원의 주간 일정을 나타내는

구문테이블 만들기예를 들어 다음과 같은 정확한 윈 토토 크기를 지정할 수 있습니다.

테이블 생성 tictactoe (

그러나 현재 구현은 제공된 윈 토토 크기 한계를 무시합니다. 즉, 행동은 지정되지 않은 길이의 윈 토토과 동일합니다..

현재 구현은 선언 된 차원 수를 시행하지 않습니다. 특정 요소 유형의 윈 토토은 크기 또는 크기의 크기에 관계없이 동일한 유형으로 간주됩니다.테이블 만들기단순히 문서화입니다. 런타임 동작에는 영향을 미치지 않습니다.

키워드를 사용하여 SQL 표준을 준수하는 대체 구문윈 토토, 1 차원 윈 토토에 사용할 수 있습니다.pay_by_quarter:로 정의 될 수 있습니다.

pay_by_quarter 정수 윈 토토 [4],

또는 윈 토토 크기를 지정할 경우 :

pay_by_quarter 정수 윈 토토,

이전과 같이PostgreSQL어떤 경우에도 크기 제한을 시행하지 않습니다.

8.15.2. 윈 토토 값 입력#

문자 그대로 상수로 윈 토토 값을 작성하려면 곱슬 브레이스 내의 요소 값을 둘러싸고 쉼표로 분리하십시오. (C를 알고 있다면, 이것은 초기화 구조에 대한 C 구문과 다르지 않습니다.) 요소 값에 대한 이중 인용문을 넣을 수 있으며 쉼표 또는 곱슬 괄호가 포함되어있는 경우 그렇게해야합니다.

'val1 delim val2 delim... '

여기서delim|pg_type입장. 에 제공된 표준 데이터 유형 중PostgreSQL배포, 모두 쉼표를 사용합니다 (,), 유형을 제외하고Box세미콜론을 사용하는 (;). 각val는 윈 토토 요소 유형의 상수 또는 서브 어레이입니다. 윈 토토 상수의 예는 다음과 같습니다.

'1,2,3, 4,5,6, 7,8,9'

이 상수는 정수의 3 개의 서브 배달로 구성된 2 차원 3 x 3 어레이입니다.

윈 토토 상수의 요소를 null로 설정하려면 쓰기null요소 값의 경우. (상단 또는 소문자 변형null할 것입니다.) 실제 문자열 값을 원한다면null, 당신은 그 주위에 이중 인용문을 넣어야합니다.

(이러한 종류의 윈 토토 상수는 실제로 논의 된 일반 유형 상수의 특별한 경우 일뿐입니다섹션 4.1.2.7. 상수는 처음에 문자열로 처리되어 윈 토토 입력 변환 루틴으로 전달됩니다.

이제 우리는 일부를 보여줄 수 있습니다삽입진술 :

sal_emp에 삽입하십시오

이전 두 삽입물의 결과는 다음과 같습니다.

sal_emp에서 선택 *;

다차원 윈 토토은 각 차원마다 일치하는 범위를 가져야합니다. 불일치는 예를 들어 오류가 발생합니다.

sal_emp에 삽입하십시오

윈 토토생성자 구문도 사용할 수 있습니다 :

sal_emp에 삽입하십시오

윈 토토 요소는 일반적인 SQL 상수 또는 표현임을 알 수 있습니다. 예를 들어, 문자열 리터럴은 윈 토토 리터럴에서 두 번 인용 대신 단일 인용됩니다.윈 토토생성자 구문에 대해 자세히 설명합니다.섹션 4.2.12.

8.15.3. 윈 토토 액세스#

이제 테이블에서 일부 쿼리를 실행할 수 있습니다. 먼저 윈 토토의 단일 요소에 액세스하는 방법을 보여줍니다.

pay_by_quarter [1] <> pay_by_quarter [2];

윈 토토 위시 번호는 정사각형 브래킷 내에 작성됩니다. 기본적으로PostgreSQL윈 토토에 대한 하나의 숫자 컨벤션, 즉 윈 토토을 사용합니다.n요소는로 시작합니다.윈 토토 [1]윈 토토 [n].

이 쿼리는 모든 직원의 3 분기 급여를 검색합니다.

sal_emp에서 pay_by_quarter [3]를 선택하십시오.

윈 토토의 임의의 직사각형 조각 또는 서브 어레이에 액세스 할 수도 있습니다. 윈 토토 슬라이스는 쓰기로 표시됩니다하위 바운드:상한하나 이상의 윈 토토 치수의 경우. 예를 들어,이 쿼리는 요가의 첫 이틀 동안 Bill의 일정에서 첫 번째 항목을 검색합니다.

sal_emp에서 일정을 선택하십시오 [1 : 2] [1 : 1] 여기서 name = 'bill';

어떤 치수가 슬라이스로 작성되면, 즉 결장을 포함하면 모든 치수가 슬라이스로 처리됩니다. 단일 숫자 (결장 없음) 만있는 모든 치수는 1에서 지정된 숫자로 취급됩니다.[2][1 : 2],이 예에서와 같이 :

sal_emp에서 일정을 선택하십시오 [1 : 2] [2] where name = 'bill';

비 슬라이스 케이스와의 혼란을 피하기 위해 모든 차원에 슬라이스 구문을 사용하는 것이 가장 좋습니다 (예 :[1 : 2] [1 : 1], 아님[2] [1 : 1].

생략 할 수 있습니다하위 바운드및/또는상한슬라이스 지정자; 누락 된 바운드는 윈 토토 첨자의 하한 또는 상한으로 대체됩니다.

sall_emp에서 일정을 선택하십시오 [: 2] [2 :] where name = 'bill';

윈 토토 자체 또는 첨자 표현식이 NULL 인 경우 윈 토토 첨자 표현식이 NULL을 반환합니다. 또한 첨자가 윈 토토 경계 외부에 있으면 NULL이 반환됩니다 (이 경우 오류가 발생하지 않음).일정현재 차원이 있습니다[1 : 3] [1 : 2]그런 다음 참조일정 [3] [3]null을 생산합니다. 마찬가지로, 잘못된 수의 첨자가있는 윈 토토 참조는 오류가 아닌 널을 산출합니다.

윈 토토 자체 또는 첨자 표현식이 널 인 경우 윈 토토 슬라이스 표현식도 마찬가지로 널을 생성합니다. 그러나, 현재 윈 토토 경계 외부에있는 윈 토토 슬라이스를 선택하는 것과 같은 다른 경우, 슬라이스 표현식은 빈 (Zero-Dimensional) 윈 토토이 NULL 대신에 생성됩니다.

모든 윈 토토 값의 현재 치수는를 검색 할 수 있습니다.array_dims기능 :

sal_emp에서 array_dims (일정)를 선택하여 이름 = 'carol';

array_dims생산 A텍스트결과, 사람들이 읽는 것이 편리하지만 프로그램에 불편 함. 치수는로 검색 할 수도 있습니다.array_upperandArray_Lower, 지정된 윈 토토 치수의 상단과 하한을 각각 반환합니다.

sal_emp에서 array_upper (일정, 1)를 선택하여 이름 = 'carol';

array_length지정된 윈 토토의 길이를 반환합니다 :

sal_emp에서 array_length (일정, 1)를 선택하여 name = 'carol';

추기경모든 차원에서 윈 토토에서 총 요소 수를 반환합니다. 효과적으로 호출하는 행의 수입니다Unnest수율 :

sal_emp에서 추기경 (일정)을 선택하십시오.

8.15.4. 윈 토토 수정#

윈 토토 값을 완전히 대체 할 수 있습니다 :

업데이트 sal_emp set pay_by_quarter = '25000,25000,27000,27000'

또는 사용윈 토토표현 구문 :

업데이트 Sal_emp Set Pay_by_Quarter = 윈 토토 ​​[25000,25000,27000,27000]

윈 토토은 단일 요소로 업데이트 될 수 있습니다 :

업데이트 Sal_emp Set Pay_by_Quarter [4] = 15000

또는 슬라이스로 업데이트 :

업데이트 Sal_emp Set Pay_by_Quarter [1 : 2] = '27000,27000'

생략 된 슬라이스 구문하위 바운드및/또는상한도 사용할 수 있지만, 널 또는 차원이 아닌 윈 토토 값을 업데이트 할 때만 (그렇지 않으면 대체 할 기존 첨자 제한이 없습니다)..

저장된 윈 토토 값은 아직 존재하지 않는 요소에 할당하여 확대 될 수 있습니다. 이전에 존재하는 사람들과 새로 할당 된 요소 사이의 모든 위치는 널로 채워집니다.MyArray현재 4 개의 요소가 있으며, 업데이트 한 후에는 6 개의 요소가 있습니다.MyArray [6]; MyArray [5]NULL이 포함됩니다. 현재 이러한 방식의 확대는 다차원 윈 토토이 아닌 1 차원 윈 토토에만 허용됩니다.

구독 할당은 하나의 기반 첨자를 사용하지 않는 윈 토토을 생성 할 수 있습니다. 예를 들어에 할당 할 수 있습니다.MyArray [-2 : 7]-2에서 7까지의 위시 값이있는 윈 토토을 작성하려면

새로운 윈 토토 값은 연결 연산자를 사용하여 구성 할 수 있습니다.||:

윈 토토 선택 [1,2] || 윈 토토 [3,4];

연결 연산자는 단일 요소를 1 차원 윈 토토의 시작 또는 끝으로 밀어 낼 수 있도록합니다. 또한 두 가지를 받아들입니다N-차원 윈 토토 또는 anN-차원 및 anN+1-차원 윈 토토.

단일 요소가 1 차원 윈 토토의 시작 또는 끝으로 밀려 나면 결과는 윈 토토 피연산자와 동일한 하한 첨자가있는 윈 토토입니다. 예를 들어:

array_dims를 선택하십시오 (1 || '[0 : 1] = 2,3':: int []);

같은 수의 치수를 가진 두 개의 윈 토토이 연결되면 결과는 왼쪽 오페란드의 외부 치수의 하한 첨자를 유지합니다. 결과는 왼쪽 오페라의 모든 요소와 오른쪽 피연산자의 모든 요소를 ​​포함하는 윈 토토입니다.

array_dims를 선택하십시오 (윈 토토 [1,2] || 윈 토토 [3,4,5]);

언제N-차원 윈 토토이 an의 시작 또는 끝으로 밀립니다N+1-차원 윈 토토, 결과는 위의 요소 윈 토토 사례와 유사합니다. 각N-차원 하위 ​​윈 토토은 본질적으로의 요소입니다.N+1-차원 윈 토토의 외부 치수. 예를 들어:

SELECT ARRAY_DIMS (윈 토토 [1,2] || 윈 토토 [[3,4], [5,6]]);

함수를 사용하여 윈 토토을 구성 할 수도 있습니다array_prepend, array_append또는array_cat. 처음 두 개는 1 차원 윈 토토 만 지원하지만array_cat다차원 윈 토토을 지원합니다. 몇 가지 예 :

array_prepend (1, array [2,3]);

간단한 경우, 위에서 논의 된 연결 연산자는 이러한 기능의 직접적인 사용보다 선호됩니다. 그러나 연결 연산자는 세 가지 사례를 모두 제공하기 위해 과부하가 걸리기 때문에 기능 중 하나를 사용하면 모호성을 피하는 데 도움이되는 상황이 있습니다.

윈 토토 선택 [1, 2] || '3, 4';

위의 예에서, 파서는 연결 연산자의 한쪽에 정수 윈 토토이 있고 다른쪽에는 결정되지 않은 유형의 상수가 보입니다. 상수의 유형을 해결하기 위해 사용하는 휴리스틱은 연산자의 다른 입력 (이 경우 정수 윈 토토과 동일한 유형이라고 가정하는 것입니다.array_cat, 아님array_append. 그것이 잘못된 선택 일 때, 윈 토토의 요소 유형에 상수를 캐스팅하여 고정 될 수 있습니다.array_append바람직한 솔루션 일 수 있습니다.

8.15.5. 윈 토토 검색#

윈 토토에서 값을 검색하려면 각 값을 확인해야합니다. 윈 토토의 크기를 알고 있다면 수동으로 수행 할 수 있습니다.

SELECT *에서 sal_emp에서 pay_by_quarter [1] = 10000 또는

그러나 이것은 큰 윈 토토의 경우 빠르게 지루해지며 윈 토토의 크기를 알 수없는 경우 도움이되지 않습니다. 대체 방법이에 설명되어 있습니다.섹션 9.25. 위의 쿼리는 다음으로 대체 될 수 있습니다.

select *에서 sal_emp에서 10000 = any (pay_by_quarter);

또한 윈 토토의 모든 값이 10000과 같은 행을 찾을 수 있습니다.

select *에서 sal_emp에서 10000 = all (pay_by_quarter);

또는 대안 적으로Generate_Subscripts함수를 사용할 수 있습니다. 예를 들어:

선택 *에서

이 함수는에 설명되어 있습니다.표 9.68.

를 사용하여 윈 토토도 검색 할 수도 있습니다.&&운영자. 왼쪽 피연산자가 오른쪽 피연산자와 겹치는지 확인합니다. 예를 들어:

SELECT *에서 SAL_EMP에서 PAY_BY_QUARTER && ARRAY [10000];

이 및 기타 윈 토토 연산자는에 자세히 설명되어 있습니다.PostgreSQL : 문서 : 17 : 9.19. 범퍼카 토토 기능 및 연산자. 에 설명 된대로 적절한 색인으로 가속화 될 수 있습니다.섹션 11.2.

를 사용하여 윈 토토에서 특정 값을 검색 할 수도 있습니다.array_positionandarray_positions함수. 전자는 윈 토토에서 값의 첫 번째 발생 첨자를 반환합니다.

array_position (array [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'mon');

윈 토토이 설정되지 않았습니다. 특정 윈 토토 요소를 검색하는 것은 데이터베이스 잘못 디자인의 징후 일 수 있습니다.

8.15.6. 윈 토토 입력 및 출력 구문#

윈 토토 값의 외부 텍스트 표현은 윈 토토 요소 유형에 대한 I/O 변환 규칙에 따라 해석되는 항목과 윈 토토 구조를 나타내는 장식으로 구성됩니다. 장식은 곱슬 괄호로 구성됩니다 ({and}) 윈 토토 값과 인접 항목 사이의 구분 기호 문자 주위. 구분자 문자는 일반적으로 쉼표입니다 (,) 그러나 다른 것이 될 수 있습니다 : 그것은에 의해 결정됩니다typdelim윈 토토의 요소 유형 설정. 에 제공된 표준 데이터 유형 중PostgreSQL분포, 모두 유형을 제외하고 쉼표를 사용합니다Box, 세미콜론을 사용하는 (;). 다차원 윈 토토에서 각 차원 (행, 평면, 큐브 등)은 고유 한 수준의 곱슬 버팀대를 가져 오며 구분자는 동일한 수준의 인접한 곱슬 브레이시 엔티티 사이에 작성해야합니다..

윈 토토 출력 루틴은 비어있는 끈, 곱슬 버팀대, 구분 기호 문자, 이중 인용문, 백 슬래시 또는 화이트 스페이스를 포함하거나 단어와 일치하는 경우 요소 값 주위에 이중 따옴표를 표시합니다.null. 요소 값에 내장 된 이중 인용문 및 백 슬래시는 백 슬래시로 향합니다.

기본적으로 윈 토토 크기의 하한 인덱스 값이 하나로 설정됩니다. 다른 하한을 갖는 윈 토토을 나타내려면 윈 토토 위시 범위는 윈 토토 내용을 작성하기 전에 명시 적으로 지정할 수 있습니다.[]) 각 윈 토토 치수의 하부 및 상한 주위에 콜론 (:) 사이의 분리기 문자. 윈 토토 치수 장식과 동일한 부호가 이어집니다 (=). 예를 들어:

f1 [1] [-2] [3] as e1, f1 [1] [-1] [5]를 E2로 선택하십시오

윈 토토 출력 루틴에는 결과에 명시 적 차원이 포함됩니다.

요소에 기록 된 값이null(어떠한 경우 변형) 요소는 널로 사용됩니다. 인용문 또는 백 슬래시의 존재는이를 비활성화하고 문자 그대로 문자열 값을 허용합니다null입력 할 예정입니다. 또한 8.2 Pre-8.2 버전의 후진 호환성PostgreSQL, Thearray_nulls구성 매개 변수를 돌릴 수 있습니다OFF의 인식을 억제하려면nullnull로

앞에서 볼 수 있듯이 윈 토토 값을 작성할 때 모든 개별 윈 토토 요소 주변에서 이중 인용문을 사용할 수 있습니다. 너필수요소 값이 윈 토토 값 파서를 혼동하는 경우 그렇게하십시오. 예를 들어, 곱슬 브레이스, 쉼표 (또는 데이터 유형의 구분 기호 문자), 이중 인용문, 백 슬래시 또는 선두 또는 후행 공백을 포함하는 요소는 이중 인용해야합니다.null인용도 인용해야합니다. 인용 된 윈 토토 요소 값에 이중 견적 또는 백 슬래시를 넣으려면 Backslash로 우선합니다.

왼쪽 브레이스 앞이나 오른쪽 버팀대 후에 공백을 추가 할 수 있습니다. 개별 항목 문자열 전후에 공백을 추가 할 수도 있습니다.

윈 토토생성자 구문 (참조섹션 4.2.12)는 SQL 명령에 윈 토토 값을 작성할 때 윈 토토 라이터 구문보다 작업하기가 더 쉽습니다. 안에윈 토토, 개별 요소 값은 윈 토토의 구성원이 아닌 경우 작성되는 것과 동일한 방식으로 작성됩니다.

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면