포스트그레다음의 열을 허용합니다. 가변 길이 다차원 배열로 정의되는 테이블입니다. 모든 내장 유형 또는 사용자 정의 유형의 배열을 생성할 수 있습니다. 사용법을 설명하기 위해 다음 테이블을 만듭니다.
테이블 생성 sal_emp(
이름 텍스트,
pay_by_quarter 정수[],
일정 텍스트[][]
);위 쿼리는 다음과 같은 테이블을 생성합니다.sal_emp와텍스트문자열
(이름), 1차원 와이즈 토토
유형정수 (pay_by_quarter)는 다음을 나타냅니다.
직원의 분기별 급여 및 2차원 배열텍스트 (일정),
이는 직원의 주간 일정을 나타냅니다.이제 우리는 몇 가지를 합니다삽입s; 언제 와이즈 토토에 추가하면 값을 중괄호로 묶고 쉼표로 구분하세요. C를 안다면 이는 C와 다르지 않습니다. 구조를 초기화하기 위한 구문입니다.
sal_emp에 삽입
VALUES('빌',
'10000, 10000, 10000, 10000',
'"회의", "점심", ');
sal_emp에 삽입
VALUES('캐롤',
'20000, 25000, 25000, 25000',
'"대화", "상담", "회의"');
이제 우리는 다음에서 몇 가지 쿼리를 실행할 수 있습니다.sal_emp. 먼저 단일 액세스 방법을 보여줍니다. 한 번에 배열의 요소. 이 쿼리는 다음의 이름을 검색합니다. 2분기에 급여가 변경된 직원:
sal_emp에서 이름 선택 WHERE pay_by_quarter[1] < pay_by_quarter[2]; 이름 ------- 축가 (1행)포스트그레스다음을 사용합니다"1 기반"번호 지정 규칙 와이즈 토토, 즉 n개 요소의 와이즈 토토은로 시작합니다.와이즈 토토[1]다음으로 끝남와이즈 토토[n].
이 쿼리는 전체 급여의 3분기 급여를 검색합니다. 직원:
sal_emp에서 pay_by_quarter[3] 선택;
분기별로 지불
----------------
10000
25000
(2행)
우리는 또한 배열의 임의의 직사각형 조각에 접근할 수 있습니다. 또는 하위 배열. 배열 슬라이스는 다음과 같이 표시됩니다.하첨자 : 상단 첨자하나 또는 더 많은 배열 차원. 이 쿼리는 다음의 첫 번째 항목을 검색합니다. 한 주의 처음 이틀에 대한 Bill의 일정:
일정 선택[1:2][1:1] FROM sal_emp WHERE 이름 = 'Bill';
일정
-------
"회의",""우리는 또한 글을 쓸 수도 있었습니다일정 선택[1:2][1] FROM sal_emp WHERE 이름 = 'Bill';같은 결과입니다. 배열 첨자 작업은 다음과 같습니다. 아래 첨자 중 하나라도 다음과 같은 경우 배열 슬라이스를 나타냅니다. 형식으로 작성됨하위 : 상부. 단 하나의 첨자에 대해서는 하한이 1로 가정됩니다. 값이 지정되었습니다.
와이즈 토토 값은 완전히 대체될 수 있습니다:
UPDATE sal_emp SET pay_by_quarter = '25000,25000,27000,27000'
WHERE 이름 = '캐롤';또는 단일 요소에서 업데이트됨:UPDATE sal_emp SET pay_by_quarter[4] = 15000
WHERE 이름 = '빌';또는 슬라이스에서 업데이트됨:UPDATE sal_emp SET pay_by_quarter[1:2] = '27000,27000'
WHERE 이름 = '캐롤';
인접한 요소에 할당하여 배열을 확대할 수 있습니다. 이미 존재하는 슬라이스에 할당하거나 이미 존재하는 데이터에 인접하거나 겹칩니다. 예를 들어, 배열 값에는 현재 4개의 요소가 있습니다. array[5]에 할당된 업데이트 이후의 요소입니다. 현재, 이런 방식의 확대는 1차원에만 허용됩니다. 다차원 배열이 아닌 배열입니다.
다음 구문테이블 생성허용합니다 정의할 고정 길이 와이즈 토토:
테이블 tictactoe 생성(
제곱 정수[3][3]
);그러나 현재 구현에서는
배열 크기 제한 --- 동작은 배열의 경우와 동일합니다.
길이가 지정되지 않았습니다.실제로 현재 구현에서는 다음을 시행하지 않습니다. 차원 수를 선언했습니다. 특정 베이스의 배열 유형에 관계없이 모두 동일한 유형으로 간주됩니다. 크기 또는 차원의 수.
모든 배열 값의 현재 크기를 검색할 수 있습니다. 와 함께array_dims기능:
SELECT array_dims(schedule) FROM sal_emp WHERE name = 'Carol'; array_dims ------------ [1:2][1:1] (1행)array_dims생성텍스트결과는 사람들이 읽기에는 편리하지만 아마도 프로그램에는 그렇게 편리하지 않을 것입니다.
와이즈 토토에서 값을 검색하려면 각 값을 확인해야 합니다 와이즈 토토의. 이 작업은 손으로 할 수 있습니다(크기를 알고 있는 경우). 와이즈 토토):
SELECT * FROM sal_emp WHERE pay_by_quarter[1] = 10000 OR
pay_by_quarter[2] = 10000 또는
pay_by_quarter[3] = 10000 또는
pay_by_quarter[4] = 10000;그러나 이는 대규모 와이즈 토토의 경우 빨리 지루해지며
와이즈 토토의 크기를 알 수 없으면 도움이 되지 않습니다. 그렇긴 하지만
기본의 일부가 아닙니다와이즈 토토배포, 기여 디렉토리에 확장 기능이 있습니다
에게와이즈 토토새로운 것을 정의하는
배열 값을 반복하기 위한 함수 및 연산자. 사용
위 쿼리는 다음과 같을 수 있습니다.SELECT * sal_emp에서 WHERE pay_by_quarter[1:4] *= 10000;지정된 열뿐만 아니라 전체 배열을 검색하려면 다음을 사용할 수 있습니다:
SELECT * sal_emp에서 WHERE pay_by_quarter *= 10000;또한 배열에 모든 항목이 포함된 행을 찾을 수 있습니다. 다음을 포함하는 10,000과 같은 값:
SELECT * sal_emp에서 WHERE pay_by_quarter **= 10000;이 선택적 모듈을 설치하려면 다음을 보십시오.기여/와이즈 토토디렉토리와이즈 토토소스 배포.
팁:배열은 목록이 아닙니다. 배열을 사용하여 이전 단락에서 설명한 방식은 종종 데이터베이스 설계 오류. 배열 필드는 일반적으로 분할되어야 합니다. 별도의 테이블로 이동합니다. 테이블은 분명히 검색될 수 있습니다 쉽게.