postgresql열을 허용합니다 가변 길이의 다차원 윈 토토로 정의되는 테이블. 내장 또는 사용자 정의 기본 유형, 열거 유형의 윈 토토 또는 복합 유형을 만들 수 있습니다. 도메인의 윈 토토은 아직 없습니다 지원.
윈 토토 유형의 사용을 설명하기 위해 우리는 이것을 만듭니다. 테이블:
테이블 생성 sal_emp ( 이름 텍스트, pay_by_quarter 정수 [], 일정 텍스트 [] [] );
그림과 같이, 윈 토토 데이터 유형은 Square를 추가하여 명명됩니다. 브래킷 ([])의 데이터 유형 이름으로 윈 토토 요소. 위의 명령은라는 테이블을 만듭니다.sal_emp유형 열이있는텍스트(이름), 1 차원 유형정수(pay_by_quarter) 분기 별 직원의 급여 및 2 차원 윈 토토 의텍스트(일정)는 직원을 나타냅니다 주간 일정.
구문테이블 생성허용 지정할 윈 토토의 정확한 크기 (예 :
테이블 생성 tictactoe ( 사각형 정수 [3] [3] );
그러나 현재 구현은 제공된 모든 것을 무시합니다 윈 토토 크기 제한, 즉 동작은 윈 토토과 동일합니다. 지정되지 않은 길이의.
현재 구현은 선언 된 것을 시행하지 않습니다 치수 수. 특정 요소의 윈 토토 유형은 모두 동일한 유형으로 간주됩니다. 크기 또는 치수 수. 윈 토토 크기를 선언하거나 선언합니다 의 치수 수테이블 생성단순히 문서화입니다. 런타임에는 영향을 미치지 않습니다 행동.
SQL 표준을 준수하는 대체 구문 키워드 사용윈 토토, 사용할 수 있습니다 1 차원 윈 토토의 경우.pay_by_quarter정의되었을 수 있습니다 처럼:
pay_by_quarter 정수 윈 토토 [4],
또는 윈 토토 크기를 지정할 경우 :
pay_by_quarter 정수 윈 토토,
이전과 같이PostgreSQL크기를 시행하지 않습니다 어떤 경우에도 제한.
윈 토토 값을 문자 그대로 상수로 작성하려면 곱슬 버팀대 내의 요소 값과 쉼표로 분리하십시오. (C를 알고 있다면 이것은 C 구문과는 다릅니다. 구조 초기화.) 주위에 이중 인용문을 넣을 수 있습니다 요소 값, 쉼표 또는 곱슬이 포함 된 경우 그렇게해야합니다. 바지 멜빵. (자세한 내용은 아래에 표시됩니다.) 따라서 일반적인 형식입니다 윈 토토 상수의 다음은 다음과 같습니다.
'val1 delim Val2 delim... '
여기서delimDelimiter입니다 그 유형의 문자, 그 유형에 기록 된대로pg_type입력. 표준 데이터 유형 중 제공PostgreSQL배포, 모두 쉼표를 사용합니다 (,), 유형을 제외하고Boxa 세미콜론 (;). 각val는 윈 토토의 상수입니다 요소 유형 또는 서브 어레이. 윈 토토 상수의 예 이다:
'1,2,3, 4,5,6, 7,8,9'
이 상수는 2 차원, 3x3 윈 토토입니다 정수의 세 가지 서브 배달 중.
unull에 상수의 요소를 설정하려면 쓰기NULL요소 값의 경우. (어느 상부 또는 소문자 변형의NULL할 것입니다.) 실제 문자열 값을 원한다면"null", 이중 인용문을 넣어야합니다 그것.
(이러한 종류의 윈 토토 상수는 실제로는 특별한 일입니다. 논의 된 일반 유형 상수의 경우섹션 4.1.2.7. 상수는 처음에 문자열로 취급됩니다 윈 토토 입력 변환 루틴으로 전달되었습니다. 명시 적 유형 사양이 필요할 수 있습니다.)
이제 우리는 일부를 보여줄 수 있습니다삽입진술 :
sal_emp에 삽입하십시오 값 ( 'Bill', '10000, 10000, 10000, 10000', ' "meeting", "lunch", "Training", "Presentation"'); sal_emp에 삽입하십시오 값 ( '캐롤', '20000, 25000, 25000, 25000', ' "아침 식사", "컨설팅", "회의", "점심"');
이전 두 삽입물의 결과는 다음과 같습니다.
sal_emp에서 선택 *; 이름 | pay_by_quarter | 일정 -------+----------------------------------------------------------------------------------- 빌 | 10000,10000,10000,10000 | 회의, 점심, 훈련, 프레젠테이션 캐롤 | 20000,25000,25000,25000 | 아침 식사, 컨설팅, 회의, 점심
다차원 윈 토토은 각각 일치하는 범위를 가져야합니다 차원. 불일치는 예를 들어 오류가 발생합니다.
sal_emp에 삽입하십시오 값 ( 'Bill', '10000, 10000, 10000, 10000', ' "meeting", "lunch", "meeting"'); 오류 : 다차원 윈 토토은 치수와 일치하는 윈 토토 표현식이 있어야합니다
the윈 토토생성자 구문 캔 또한 사용됩니다 :
sal_emp에 삽입하십시오 값 ( 'Bill', 윈 토토 [10000, 10000, 10000, 10000], 윈 토토 [[ 'Meeting', 'Lunch'], [ 'Training', 'Presentation'])); sal_emp에 삽입하십시오 값 ( '캐롤', 윈 토토 [20000, 25000, 25000, 25000], 윈 토토 [[ '아침 식사', '컨설팅'], [ '회의', '점심']);
윈 토토 요소가 일반 SQL 상수 또는 표현; 예를 들어, 문자열 리터럴은 단일 인용문이며 윈 토토 리터럴에서 두 배가 인용되는 대신. 그만큼윈 토토생성자 구문입니다 에서 더 자세히 논의섹션 4.2.12.
이제 테이블에서 일부 쿼리를 실행할 수 있습니다. 먼저, 우리는 보여줍니다 윈 토토의 단일 요소에 액세스하는 방법. 이 쿼리 급여가 변경된 직원의 이름을 검색합니다. 2 분기 :
pay_by_quarter [1] < pay_by_quarter [2]; 이름 ------- 축가 (1 행)
윈 토토 위시 번호는 정사각형 내에 기록됩니다 브래킷. 기본적으로PostgreSQL1 기반 번호를 사용합니다 윈 토토 컨벤션, 즉, 윈 토토n요소는로 시작합니다.윈 토토 [1]윈 토토 [n].
이 쿼리는 모두의 3 분기 급여를 검색합니다 직원:
sal_emp에서 pay_by_quarter [3]를 선택하십시오. pay_by_quarter --------------- 10000 25000 (2 줄)
우리는 또한 윈 토토의 임의의 직사각형 조각에 액세스 할 수 있습니다. 또는 서브 사업. 윈 토토 슬라이스는 쓰기로 표시됩니다하위 바운드:상한하나 이상의 윈 토토 치수의 경우. 예를 들어,이 쿼리 Bill의 첫 두 일정에 대한 첫 번째 항목을 검색합니다. 요일 :
Sal_emp에서 일정을 선택하십시오 [1 : 2] [1 : 1] 여기서 name = 'bill'; 일정 ------------------------- meeting, training
차원이 슬라이스로 작성된 경우, 즉 결장, 모든 치수는 슬라이스로 취급됩니다. 모든 차원 단일 숫자 (결장 없음) 만있는 것은 존재로 취급됩니다. 1에서 지정된 숫자로 예를 들어,[2][1 : 2],이 예에서와 같이 :
sal_emp에서 일정을 선택하십시오 [1 : 2] [2] where name = 'bill'; 일정 --------------------------------------------------- 회의, 점심, 훈련, 프레젠테이션
비 슬라이스 케이스와의 혼란을 피하기 위해 사용하는 것이 가장 좋습니다. 모든 차원에 대한 슬라이스 구문 (예 :[1 : 2] [1 : 1], 아님[2] [1 : 1].
윈 토토 위시 표현식은 윈 토토 자체 또는 모든 첨자 표현식은 NULL입니다. 또한 첨자가 윈 토토 외부에 있으면 NULL이 반환됩니다. 경계 (이 경우 오류가 발생하지 않습니다). 예를 들어, if일정현재 차원이 있습니다[1 : 3] [1 : 2]그런 다음 참조일정 [3] [3]null을 생산합니다. 마찬가지로 윈 토토 잘못된 수의 첨자로 참조하면 NULL이 생성됩니다. 오류보다는.
윈 토토 슬라이스 표현식도 마찬가지로 널을 생성합니다. 그 자체 또는 모든 첨자 표현식은 무효입니다. 하지만, 윈 토토 슬라이스 선택과 같은 다른 경우 현재 윈 토토 경계 외부, 슬라이스 표현 NULL 대신 빈 (제로 차원) 윈 토토을 생성합니다. (이것 비 슬라이스 행동과 일치하지 않으며 역사적으로 수행됩니다. 요청 된 슬라이스가 윈 토토과 부분적으로 겹치는 경우 한계, 그러면 겹치는 것만으로 조용히 줄어 듭니다. Null을 반환하는 대신 지역.
모든 윈 토토 값의 현재 치수를 검색 할 수 있습니다.
와 함께array_dims
기능 :
sal_emp에서 array_dims (일정)를 선택하십시오. Array_dims ------------ [1 : 2] [1 : 2] (1 행)
array_dims
생산 A텍스트결과, 편리합니다
사람들은 읽을 수 있지만 아마도 프로그램에 불편 함.
치수는로 검색 할 수도 있습니다.array_upper
andArray_Lower
, 상단과 하단을 반환합니다
지정된 윈 토토 치수의 경계 :
sal_emp에서 array_upper (일정, 1)를 선택하여 이름 = 'carol'; array_upper ------------- 2 (1 행)
array_le윈 토토th
지정된 윈 토토 치수의 길이 :
sal_emp에서 array_le윈 토토th (일정, 1)를 선택하여 이름 = 'carol'; Array_Length -------------- 2 (1 행)
윈 토토 값을 완전히 대체 할 수 있습니다 :
업데이트 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 여기서 이름 = 'Bill';
또는 슬라이스로 업데이트 :
업데이트 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,2,3,4
연결 연산자는 단일 요소를 허용합니다 1 차원 윈 토토의 시작 또는 끝으로 밀 렸습니다. 그것 또한 두 가지를 받아들입니다n-차원 윈 토토 또는n-차원 및n+1-차원 윈 토토.
단일 요소가 시작 또는 1 차원 윈 토토의 끝, 결과는 윈 토토 피연산자와 동일한 하한 첨자. 을 위한 예:
array_dims를 선택하십시오 (1 || '[0 : 1] = 2,3':: int []); Array_dims ------------ [0 : 2] (1 줄) array_dims를 선택하십시오 (윈 토토 [1,2] || 3); Array_dims ------------ [1 : 3] (1 행)
숫자가 같은 두 윈 토토이있는 경우 연결된 결과, 결과는 하한 첨자를 유지한다 왼쪽 피연산자의 외부 치수. 결과는 윈 토토입니다 왼쪽 피연산자의 모든 요소를 포함합니다 오른쪽 피연산자의 모든 요소. 예를 들어:
array_dims를 선택하십시오 (Array [1,2] || 윈 토토 [3,4,5]); Array_dims ------------ [1 : 5] (1 줄) Array_dims (Array [[1,2], [3,4]] || 윈 토토 [[5,6], [7,8], [9,0]]); Array_dims ------------ [1 : 5] [1 : 2] (1 행)
언제n-차원 윈 토토 의 시작 또는 끝으로 밀려옵니다.n+1-차원 윈 토토은 결과입니다 위의 요소 윈 토토 사례와 유사합니다. 각n-차원 서브 어레이는 본질적으로 an입니다 요소n+1-차원 윈 토토의 외부 치수. 예를 들어:
array_dims를 선택하십시오 (Array [1,2] || 윈 토토 [[3,4], [5,6]]); Array_dims ------------ [1 : 3] [1 : 2] (1 행)
함수를 사용하여 윈 토토을 구성 할 수도 있습니다array_prepend
, array_append
또는array_cat
. 처음 두 가지만 지원합니다
1 차원 윈 토토이지만array_cat
다차원 윈 토토을 지원합니다.
몇 가지 예 :
array_prepend (1, array [2,3]); array_prepend ----------------- 1,2,3
간단한 경우, 위에서 논의한 연결 연산자 이러한 기능을 직접 사용하는 것보다 선호됩니다. 하지만, 연결 연산자가 모두 봉사하기 위해 과부하되어 있기 때문입니다 세 가지 경우, 중 하나를 사용하는 상황이 있습니다. 기능은 모호성을 피하는 데 도움이됩니다. 예를 들어 고려하다:
윈 토토을 선택하십시오 [1, 2] || '3, 4'; - 비 유형의 리터럴은 윈 토토로 간주됩니다 ?열? ---------- 1,2,3,4 윈 토토 [1, 2] ||를 선택하십시오 '7'; - 이거도 마찬가지입니다 오류 : 기형 윈 토토 리터럴 : "7" 윈 토토 [1, 2] ||를 선택하십시오 널; - 노출되지 않은 널도 마찬가지입니다 ?열? --------- 1,2
위의 예에서, 파서는 정수 윈 토토을 봅니다.
연결 연산자의 한쪽과 상수
다른 사람의 결정되지 않은 유형. 그것이 사용하는 휴리스틱
상수의 유형은 동일한 유형이라고 가정하는 것입니다.
연산자의 다른 입력 -이 경우 정수 윈 토토. 그래서
연결 연산자는 대표하는 것으로 추정됩니다array_cat
, 아님array_append
. 그것이 잘못된 선택 일 때
어레이에 상수를 캐스팅하여 고정 될 수 있습니다.
요소 유형; 하지만 명시 적 사용array_append
바람직 할 수 있습니다
해결책.
윈 토토에서 값을 검색하려면 각 값은 확인. 이는 크기를 알고 있다면 수동으로 수행 할 수 있습니다 정렬. 예를 들어:
select *에서 sal_emp에서 pay_by_quarter [1] = 10000 또는 pay_by_quarter [2] = 10000 또는 pay_by_quarter [3] = 10000 또는 pay_by_quarter [4] = 10000;
그러나 이것은 큰 윈 토토에 대해 빠르게 지루하게됩니다 윈 토토의 크기를 알 수없는 경우 도움이되지 않습니다. an 대체 방법은에 설명되어 있습니다.섹션 9.23. 위의 쿼리 대체 할 수 있습니다 :
SELECT *에서 sal_emp에서 10000 = any (pay_by_quarter);
또한 윈 토토에 모든 행을 찾을 수 있습니다. 다음과 같은 값은 다음과 같습니다.
SELECT *에서 sal_emp에서 10000 = ALL (pay_by_quarter);
또는 대안 적으로Generate_Subscripts
함수를 사용할 수 있습니다. 을 위한
예:
선택 *에서 (pay_by_quarter를 선택하고 generate_subscripts (pay_by_quarter, 1) sal_emp에서) foo로 여기서 pay_by_quarter [s] = 10000;
이 함수는에 설명되어 있습니다.테이블 9-50.
팁 :윈 토토이 설정되지 않았습니다. 구체적인 검색 윈 토토 요소는 데이터베이스 잘못 디자인의 표시 일 수 있습니다. 각 항목에 대해 행이있는 별도 테이블 사용 고려 그것은 윈 토토 요소 일 것입니다. 이것은 더 쉬울 것입니다 검색, 많은 수의에 대해 더 잘 확장 할 가능성이 강요.
윈 토토 값의 외부 텍스트 표현은 구성됩니다 I/O 변환에 따라 해석되는 항목 윈 토토의 요소 유형에 대한 규칙과 장식 윈 토토 구조를 나타냅니다. 장식은 곱슬으로 구성됩니다 브레이스 (및) 윈 토토 값과 구분 기호 주변 인접한 항목 사이의 문자. 구분자 캐릭터는입니다 보통 쉼표 (,) 다른 것 : 그것은에 의해 결정됩니다typdelim윈 토토의 요소 유형 설정. 에 제공된 표준 데이터 유형 중PostgreSQL배포, 모두 쉼표를 사용합니다. 유형을 제외하고Box, a 세미콜론 (;). 다차원에서 윈 토토, 각 치수 (행, 평면, 큐브 등)는 자체적으로 얻습니다. 곱슬 버팀대의 수준과 구분 제는 사이에 기록해야합니다. 같은 수준의 인접한 곱슬 브레이시 엔티티.
윈 토토 출력 루틴에는 이중 인용문이 있습니다 비어있는 끈 인 경우 요소 값은 곱슬 괄호를 포함하고, 구분 기호 문자, 이중 따옴표, 백 슬래시 또는 흰색 공간, 또는 단어 일치NULL. 더블 요소 값에 포함 된 따옴표와 백 슬래시가 있습니다 백 슬래시 에스케이프. 숫자 데이터 유형의 경우 안전합니다 그 이중 인용문은 결코 나타나지 않지만 텍스트 데이터의 경우 유형 1은 존재에 대처할 준비를해야합니다. 또는 인용문의 부재.
기본적으로 윈 토토의 하한 인덱스 값 치수는 하나로 설정됩니다. 다른 낮은 윈 토토을 나타냅니다 경계, 윈 토토 첨자 범위는 명시 적으로 지정할 수 있습니다 윈 토토 내용을 작성하기 전에. 이 장식은 구성됩니다 사각형 브래킷 ([]) 각 윈 토토 주위 콜론 (과 함께 치수의 하부 및 상한:) 사이의 분리기 문자. 윈 토토 치수 장식과 동일한 부호가 이어집니다 (=). 예를 들어:
f1 [1] [-2] [3] as e1, f1 [1] [-1] [5]를 E2로 선택하십시오 에서 ( '[1 : 1] [-2 : -1] [3 : 5] = 1,2,3, 4,5,6':: int [] as ss; E1 | E2 ----+---- 1 | 6 (1 행)
윈 토토 출력 루틴에는 명시 적 차원이 포함됩니다 하나 이상의 하한이있을 때만 결과 하나와 다릅니다.
요소에 기록 된 값이NULL(어떠한 경우 변형) 요소가 가져옵니다 무효. 따옴표 나 백 슬래시의 존재는 비활성화됩니다 이것은 문자 그대로 문자열 값을 허용합니다"null"입력 할 예정입니다. 또한 뒤로 8.2 이전 버전의 호환성PostgreSQL, Thearray_nulls구성 매개 변수를 돌릴 수 있습니다off인식을 억제하려면NULLNULL로서.
이전에 표시된대로 윈 토토 값을 작성할 때 사용할 수 있습니다. 개별 윈 토토 요소 주변의 이중 인용문. 너필수그렇다면 그렇게하십시오 요소 값은 그렇지 않으면 윈 토토 값 파서를 혼동합니다. 예를 들어, 곱슬 버팀대, 쉼표 (또는 데이터 유형의 Delimiter 문자), 이중 따옴표, 백 슬래시, 또는 선도 또는 후행 공백은 두 번 인용해야합니다. 비어 있는 단어와 일치하는 문자열과 문자열NULL인용도 인용해야합니다. 이중 견적을 넣으려면 또는 인용 된 윈 토토 요소 값의 BackSlash, Escape String을 사용하십시오. 구문 및 백 슬래시로 우선합니다. 또는 당신은 할 수 있습니다 견적을 피하고 백 슬래시 에스케이프를 사용하여 모든 데이터를 보호하십시오 그렇지 않으면 윈 토토 구문으로 취할 문자
왼쪽 버팀대 앞이나 오른쪽 후에 공백을 추가 할 수 있습니다. 중괄호. 전후에 공백을 추가 할 수도 있습니다 개별 항목 문자열. 이 모든 경우에 공백 무시됩니다. 그러나 이중 인용 내에서의 공백 요소, 또는 비 whitespace에 의해 양쪽에 둘러싸여 있습니다 요소의 문자는 무시되지 않습니다.
참고 :SQL에 쓰는 내용을 기억하십시오 명령은 먼저 문자열 문자로 해석되며 그런 다음 윈 토토로. 이것은 백 슬래시 수를 두 배로 늘립니다 당신은 필요합니다. 예를 들어, a를 삽입하려면텍스트백 슬래시를 포함하는 윈 토토 값 및 a 이중 인용문, 당신은 다음을 쓸 필요가 있습니다 :
삽입 ... 값 (e ' "\\\\", "\\" "');이스케이프 문자열 프로세서가 한 레벨을 제거합니다 백 슬래시, 윈 토토 값 파서에 도착하는 것이 같아요"\\", "\" ". 차례로,텍스트데이터 유형의 입력 루틴이됩니다\및"각각. (우리가 그랬다면 입력 루틴도 처리 한 데이터 유형으로 작업 특별히 백 슬래시,BYTEA예를 들어, 우리는 저장된 윈 토토에 하나의 백 슬래시를 가져 오려는 명령 요소.) 달러 인용 (참조섹션 4.1.2.4) 두 배를 피하기 위해 사용할 수 있습니다. 백 슬래시.
팁 :the윈 토토생성자 구문 (참조섹션 4.2.12)는 종종 작업보다 작업하기가 더 쉽습니다 SQL에서 윈 토토 값을 작성할 때 어레이-문자 구문 명령. 안에윈 토토, 개인 요소 값은 동일한 방식으로 작성됩니다. 윈 토토 멤버가 아닌 경우 작성.