Postgresa의 열을 허용합니다 테이블은 가변 길이 다차원 배열로 정의됩니다. 내장 유형 또는 사용자 정의 유형의 배열을 만들 수 있습니다. 그들의 사용을 설명하기 위해, 우리는이 테이블을 만듭니다 :
테이블 생성 sal_emp ( 이름 텍스트, pay_by_quarter 정수 [], 일정 텍스트 [] [] );위의 쿼리는 이름이 지정된 테이블을 만듭니다sal_empwith텍스트문자열 (이름), 1 차원 배열 유형정수(pay_by_quarter) 분기 별 직원의 급여 및 2 차원 배열텍스트(일정), 직원의 주간 일정을 나타냅니다.
이제 우리는 일부를합니다삽입s; 언제 배열에 추가하면 브레이스 내의 값을 동봉하고 쉼표로 분리하십시오. C를 알고 있다면 이것은와 다릅니다 구조 초기화를위한 구문.
sal_emp에 삽입하십시오 값 ( 'Bill', '10000, 10000, 10000, 10000', ' "meeting", "lunch", '); sal_emp에 삽입하십시오 값 ( '캐롤', '20000, 25000, 25000, 25000', ' "talk", "consult", "meeting"');
이제 쿼리를 실행할 수 있습니다sal_emp. 먼저, 우리는 싱글에 액세스하는 방법을 보여줍니다 한 번에 배열의 요소. 이 쿼리는 이름을 검색합니다 2 분기에 임금이 바뀌는 직원 :
pay_by_quarter [1] < pay_by_quarter [2]; 이름 ------- 축가 (1 행)Postgres사용"1 기반"번호 컨벤션에 대한 컨벤션 배열, 즉 N 요소의 배열은로 시작합니다.배열 [1]배열 [n].
이 쿼리는 모두의 3 분기 급여를 검색합니다 직원:
sal_emp에서 pay_by_quarter [3]를 선택하십시오. pay_by_quarter --------------- 10000 25000 (2 줄)
배열의 임의의 직사각형 조각에도 액세스 할 수 있습니다. 또는 서브 사업. 배열 슬라이스는 쓰기로 표시됩니다하위 첨자 : 상단 첨자하나 또는 더 많은 배열 치수. 이 쿼리는 첫 번째 항목을 검색합니다 주중 첫 이틀 동안의 빌의 일정 :
Sal_emp에서 일정을 선택하십시오 [1 : 2] [1 : 1] 여기서 name = 'bill'; 일정 ------------------- "회의",""우리는 또한 글을 쓸 수 있습니다
sal_emp에서 일정을 선택하십시오 [1 : 2] [1] where name = 'bill';동일한 결과가 있습니다. 배열 첨자 작업은 다음과 같습니다 첨자가있는 경우 배열 슬라이스를 나타 내기 위해 양식으로 작성Lower : 어퍼. 1의 하한은 하나만있는 모든 첨자에 대해 가정됩니다. 값이 지정됩니다.
배열 값을 완전히 대체 할 수 있습니다 :
업데이트 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' 여기서 이름 = '캐롤';
인접한 요소에 할당하여 배열을 확대 할 수 있습니다. 이미 존재하는 사람들 또는 슬라이스에 할당하여 이미 존재하는 데이터에 인접하거나 중복됩니다. 예를 들어, if 배열 값에는 현재 4 개의 요소가 있으며 5 개가 있습니다. 배열에 할당하는 업데이트 후 요소 [5]. 현재, 이러한 방식으로 확대는 1 차원 만 허용됩니다 다차원 배열이 아닌 배열.
구문에 대한 구문테이블 생성허용 정의 할 고정 길이 어레이 :
테이블 생성 tictactoe ( 사각형 정수 [3] [3] );그러나 현재 구현은 그것을 시행하지 않습니다 배열 크기 제한 --- 동작은 배열과 동일합니다. 지정되지 않은 길이.
실제로 현재 구현은 시행되지 않습니다 크기의 수가 선언되었습니다. 특정베이스의 배열 유형은 모두 동일한 유형으로 간주됩니다. 크기 또는 치수 수.
모든 배열 값의 현재 치수를 검색 할 수 있습니다. 와 함께array_dims기능 :
sal_emp에서 array_dims (일정)를 선택하여 이름 = 'carol'; Array_dims ------------ [1 : 2] [1 : 1] (1 행)array_dims생산 A텍스트결과, 사람들이 읽는 것이 편리하지만 아마도 프로그램에 그렇게 편리하지 않을 것입니다.
배열에서 값을 검색하려면 각 값을 확인해야합니다. 배열의. 이것은 손으로 할 수 있습니다 (크기를 알고 있다면 배열) :
SELECT *에서 sal_emp에서 pay_by_quarter [1] = 10000 또는 pay_by_quarter [2] = 10000 또는 pay_by_quarter [3] = 10000 또는 pay_by_quarter [4] = 10000;그러나 이것은 큰 배열에 대해 빠르게 지루하게됩니다 배열의 크기를 알 수없는 경우 도움이되지 않습니다. 비록 그렇습니다 기본의 일부가 아닙니다와이즈 토토배포, 기여 디렉토리에는 확장이 있습니다 에게와이즈 토토새로운 정의 배열 값을 반복하기위한 함수 및 연산자. 사용 위의 쿼리는 다음과 같습니다.
select *에서 sal_emp에서 pay_by_quarter [1 : 4] * = 10000;전체 배열 (지정된 열만이 아님)을 검색하려면 사용할 수 있습니다 :
SELECT *에서 sal_emp에서 pay_by_quarter * = 10000;또한 배열에 모든 행이있는 행을 찾을 수 있습니다. 다음과 같은 10,000과 같은 값
select *from sal_emp where pay_by_quarter ** = 10000;이 선택 모듈을 설치하려면를보십시오.Contrib/Array디렉토리와이즈 토토소스 배포.
팁 :배열은 목록이 아닙니다. 배열 사용 이전 단락에 설명 된 방식은 종종 데이터베이스 잘못 디자인. 배열 필드는 일반적으로 분할해야합니다 별도의 테이블로 꺼집니다. 테이블을 검색 할 수 있습니다 쉽게.