PostgreSQL표의 열을 가변 길이의 다차원 윈 토토로 정의 할 수 있습니다. 내장 또는 사용자 정의 기본 유형, 열거 유형, 복합 유형, 범위 유형 또는 도메인의 윈 토토.
윈 토토 유형의 사용을 설명하려면이 표를 만듭니다.
테이블 생성 sal_emp (
표시된대로, 윈 토토 데이터 유형은 사각형 브래킷을 추가하여 명명됩니다 ([]
) 윈 토토 요소의 데이터 유형 이름으로. 위의 명령은라는 테이블을 만듭니다.sal_emp
유형 열이있는텍스트
(이름
), 1 차원 유형의 1 차원 윈 토토정수
(pay_by_quarter
)는 분기 별 직원의 급여와 2 차원 윈 토토을 나타내는텍스트
(일정
), 직원의 주간 일정을 나타내는
구문테이블 만들기
예를 들어 다음과 같은 정확한 윈 토토 크기를 지정할 수 있습니다.
테이블 생성 tictactoe (
그러나 현재 구현은 제공된 윈 토토 크기 한계를 무시합니다. 즉, 행동은 지정되지 않은 길이의 윈 토토과 동일합니다..
현재 구현은 선언 된 차원 수를 시행하지 않습니다. 특정 요소 유형의 윈 토토은 크기 또는 크기의 크기에 관계없이 동일한 유형으로 간주됩니다.테이블 만들기
단순히 문서화입니다. 런타임 동작에는 영향을 미치지 않습니다.
키워드를 사용하여 SQL 표준을 준수하는 대체 구문윈 토토
, 1 차원 윈 토토에 사용할 수 있습니다.pay_by_quarter
:로 정의 될 수 있습니다.
pay_by_quarter 정수 윈 토토 [4],
또는 윈 토토 크기를 지정할 경우 :
pay_by_quarter 정수 윈 토토,
이전과 같이PostgreSQL어떤 경우에도 크기 제한을 시행하지 않습니다.
문자 그대로 상수로 윈 토토 값을 작성하려면 곱슬 브레이스 내의 요소 값을 둘러싸고 쉼표로 분리하십시오. (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.
이제 테이블에서 일부 쿼리를 실행할 수 있습니다. 먼저 윈 토토의 단일 요소에 액세스하는 방법을 보여줍니다.
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_upper
andArray_Lower
, 지정된 윈 토토 치수의 상단과 하한을 각각 반환합니다.
sal_emp에서 array_upper (일정, 1)를 선택하여 이름 = 'carol';
array_length
지정된 윈 토토의 길이를 반환합니다 :
sal_emp에서 array_length (일정, 1)를 선택하여 name = 'carol';
추기경
모든 차원에서 윈 토토에서 총 요소 수를 반환합니다. 효과적으로 호출하는 행의 수입니다Unnest
수율 :
sal_emp에서 추기경 (일정)을 선택하십시오.
윈 토토 값을 완전히 대체 할 수 있습니다 :
업데이트 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
바람직한 솔루션 일 수 있습니다.
윈 토토에서 값을 검색하려면 각 값을 확인해야합니다. 윈 토토의 크기를 알고 있다면 수동으로 수행 할 수 있습니다.
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_position
andarray_positions
함수. 전자는 윈 토토에서 값의 첫 번째 발생 첨자를 반환합니다.
array_position (array [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'mon');
윈 토토이 설정되지 않았습니다. 특정 윈 토토 요소를 검색하는 것은 데이터베이스 잘못 디자인의 징후 일 수 있습니다.
윈 토토 값의 외부 텍스트 표현은 윈 토토 요소 유형에 대한 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
의 인식을 억제하려면null
null로
앞에서 볼 수 있듯이 윈 토토 값을 작성할 때 모든 개별 윈 토토 요소 주변에서 이중 인용문을 사용할 수 있습니다. 너필수요소 값이 윈 토토 값 파서를 혼동하는 경우 그렇게하십시오. 예를 들어, 곱슬 브레이스, 쉼표 (또는 데이터 유형의 구분 기호 문자), 이중 인용문, 백 슬래시 또는 선두 또는 후행 공백을 포함하는 요소는 이중 인용해야합니다.null
인용도 인용해야합니다. 인용 된 윈 토토 요소 값에 이중 견적 또는 백 슬래시를 넣으려면 Backslash로 우선합니다.
왼쪽 브레이스 앞이나 오른쪽 버팀대 후에 공백을 추가 할 수 있습니다. 개별 항목 문자열 전후에 공백을 추가 할 수도 있습니다.
윈 토토
생성자 구문 (참조섹션 4.2.12)는 SQL 명령에 윈 토토 값을 작성할 때 윈 토토 라이터 구문보다 작업하기가 더 쉽습니다. 안에윈 토토
, 개별 요소 값은 윈 토토의 구성원이 아닌 경우 작성되는 것과 동일한 방식으로 작성됩니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면