이 문서는 지원되지 않는 토토 사이트 추천 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 8.15. 윈 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

8.10. 배열

포스트그레SQL다음 열을 허용합니다. 가변 길이 다차원 배열로 정의할 테이블입니다. 내장형 또는 사용자 정의 기본 유형의 배열을 생성할 수 있습니다. (복합 유형 또는 도메인의 배열은 아직 지원되지 않습니다. 그러나.)

8.10.1. 배열 유형 선언

배열 유형의 사용을 설명하기 위해 다음을 만듭니다. 테이블:

테이블 생성 sal_emp(
    이름 텍스트,
    pay_by_quarter 정수[],
    일정 텍스트[][]
);

표시된 바와 같이 배열 데이터 유형은 사각형을 추가하여 이름이 지정됩니다. 대괄호([])을 데이터 유형 이름으로 배열 토토 사이트 추천. 위의 명령은라는 테이블을 생성합니다.sal_emp다음 유형의 열 포함텍스트 (이름), 1차원 배열 유형정수 (pay_by_quarter), 이는 다음을 나타냅니다. 분기별 직원 급여 및 2차원 배열 의텍스트 (일정), 이는 직원의 주간 일정입니다.

다음 구문테이블 생성허용 지정할 배열의 정확한 크기입니다. 예를 들면 다음과 같습니다.

테이블 tictactoe 생성(
    제곱 정수[3][3]
);

그러나 현재 구현에서는 배열 크기 제한 - 동작은 배열의 경우와 동일합니다. 길이가 지정되지 않았습니다.

실제로 현재 구현에서는 다음을 시행하지 않습니다. 차원 수를 선언했습니다. 특정 배열 요소 유형은 모두 동일한 유형으로 간주됩니다. 크기나 치수 수에 관계없이. 그래서 선언 크기 또는 크기의 수만들기 표단순한 문서이므로 런타임에 영향을 주지 않습니다. 행동.

SQL 표준을 준수하는 대체 구문은, 1차원 배열에 사용될 수 있습니다.pay_by_quarter정의되었을 수 있습니다 다음과 같이:

pay_by_quarter 정수 ARRAY[4],

이 구문에는 배열을 나타내기 위해 정수 상수가 필요합니다. 크기. 그러나 이전과 마찬가지로토토 사이트 추천크기를 강제하지 않습니다. 제한.

8.10.2. 배열 값 입력

배열 값을 리터럴 상수로 쓰려면 중괄호 안에 요소 값을 입력하고 쉼표로 구분합니다. (C를 알고 있다면 이는 C 구문과 다르지 않습니다. 구조 초기화.) 모든 항목 주위에 큰따옴표를 넣을 수 있습니다. 요소 값이며 쉼표나 곱슬머리가 포함된 경우 그렇게 해야 합니다. 교정기. (자세한 내용은 아래에 나와 있습니다.) 따라서 일반적인 형식은 배열 상수는 다음과 같습니다:

'{ val1 delim 발2 삭제 ... }'

어디에서삭제구분자입니다 해당 유형에 대한 문자(에 기록됨)pg_type항목. 표준 데이터 유형 중 에서 제공됨토토 사이트 추천배포, 유형상자다음을 사용합니다 세미콜론(;) 하지만 다른 모든 사람들은 쉼표(,). 각각은 배열의 상수이거나 토토 사이트 추천 유형 또는 하위 배열. 배열 상수의 예 이다

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

이 상수는 다음으로 구성된 2차원 3x3 배열입니다. 세 개의 정수 하위 배열로 구성됩니다.

(이런 종류의 배열 상수는 실제로는 특별한 에서 논의된 일반 유형 상수의 경우섹션 4.1.2.5. 상수는 처음에는 문자열로 처리되며 배열 입력 변환 루틴으로 전달됩니다. 명시적 유형 사양이 필요할 수 있습니다.)

이제 우리는 몇 가지를 보여줄 수 있습니다삽입문장.

sal_emp에 삽입
    VALUES('빌',
    '10000, 10000, 10000, 10000',
    '"회의", "점심", "회의"');
오류: 다차원 배열에는 차원이 일치하는 배열 표현식이 있어야 합니다.

다차원 배열은 일치하는 범위를 가져야 함을 참고하세요 각 차원에 대해. 불일치로 인해 오류가 보고됩니다.

sal_emp에 삽입
    VALUES('빌',
    '10000, 10000, 10000, 10000',
    '"회의", "점심", "훈련", "발표"');

sal_emp에 삽입
    VALUES('캐롤',
    '20000, 25000, 25000, 25000',
    '"아침 식사", "컨설팅", "회의", "점심"');

현재 배열 구현의 한계는 다음과 같습니다. 배열의 개별 요소는 SQL 널값이 될 수 없습니다. 는 전체 배열을 null로 설정할 수 있지만 배열을 가질 수는 없습니다. 일부 요소는 null이고 일부는 null이 아닙니다. (이건 바뀔 수도 있겠네요 앞으로.)

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

SELECT * FROM sal_emp;
 이름 |      분기별 지급 |                 일정
--------+---------------+-------------------------------
 빌 | 10000,10000,10000,10000 | 회의,점심,교육,발표
 캐롤 | 20000,25000,25000,25000 | 아침식사,컨설팅,회의,점심

어레이생성자 구문은 다음과 같습니다. 또한 사용됩니다:

sal_emp에 삽입
    VALUES('빌',
    배열[10000, 10000, 10000, 10000],
    ARRAY[['회의', '점심'], ['훈련', '프레젠테이션']]);

sal_emp에 삽입
    VALUES('캐롤',
    배열[20000, 25000, 25000, 25000],
    ARRAY[['아침식사', '컨설팅'], ['회의', '점심']]);

배열 토토 사이트 추천는 일반 SQL 상수이거나 표현; 예를 들어 문자열 리터럴은 작은따옴표로 묶입니다. 배열 리터럴에 있는 것처럼 큰따옴표로 묶는 대신.어레이생성자 구문은 다음과 같습니다. 더 자세히 논의됨섹션 4.2.10.

8.10.3. 어레이 액세스

이제 테이블에 대해 몇 가지 쿼리를 실행할 수 있습니다. 먼저 보여드리겠습니다 한 번에 배열의 단일 요소에 액세스하는 방법. 이 쿼리는 급여가 변경된 직원의 이름을 검색합니다. 2분기:

sal_emp에서 이름 선택 WHERE pay_by_quarter[1] < pay_by_quarter[2];

 이름
-------
 캐롤
(1행)

배열 아래 첨자 숫자는 사각형 안에 기록됩니다 괄호. 기본적으로포스트그레SQL1부터 시작하는 번호 매기기를 사용합니다. 배열에 대한 규칙, 즉의 배열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로 가정됩니다. 다음과 같이 하나의 값만 지정된 아래 첨자의 경우 예:

일정 선택[1:2][2] FROM sal_emp WHERE 이름 = 'Bill';

                 일정
------------------------------
 회의,점심,교육,발표

배열의 현재 경계 외부에서 가져오면 다음이 발생합니다. 오류가 아닌 SQL null 값입니다. 예를 들어, 만약일정현재 크기는[1:3][1:2]다음 참조일정[3][3]NULL을 생성합니다. 마찬가지로, 배열 잘못된 수의 첨자를 참조하면 null이 발생합니다. 오류보다는요. 다음과 같은 배열 슬라이스를 가져오는 중입니다. 현재 경계를 완전히 벗어나면 마찬가지로 null이 생성됩니다. 배열; 그러나 요청된 슬라이스가 배열과 부분적으로 겹치는 경우 그런 다음 자동으로 겹치는 부분으로 축소됩니다. 지역.

모든 배열 값의 현재 크기를 검색할 수 있습니다. 와 함께array_dims기능:

SELECT array_dims(schedule) FROM sal_emp WHERE name = 'Carol';

 array_dims
------------
 [1:2][1:2]
(1행)

array_dims생성텍스트결과는 다음과 같은 경우에 편리합니다. 사람들이 읽을 수 있지만 아마도 프로그램에 그다지 편리하지는 않을 것입니다. 차원은 다음을 사용하여 검색할 수도 있습니다.array_upper그리고array_lower, 상한값과 하한값을 반환합니다. 각각 지정된 배열 차원의 경계입니다.

SELECT array_upper(schedule, 1) FROM sal_emp WHERE name = 'Carol';

 array_upper
-------------
           2
(1행)

8.10.4. 배열 수정

배열 값은 완전히 교체될 수 있습니다:

UPDATE sal_emp SET pay_by_quarter = '25000,25000,27000,27000'
    WHERE 이름 = '캐롤';

또는 다음을 사용하여어레이표현 구문:

UPDATE sal_emp SET pay_by_quarter = ARRAY[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개의 요소가 있으며 이후에는 5개의 요소를 갖게 됩니다. 다음에 할당된 업데이트마이어레이[5]. 현재 이러한 방식의 확대는 다음 경우에만 허용됩니다. 다차원 배열이 아닌 1차원 배열입니다.

배열 슬라이스 할당을 통해 다음과 같은 배열을 생성할 수 있습니다. 1부터 시작하는 첨자를 사용하세요. 예를 들어 다음과 같이 할당할 수 있습니다.마이어레이[-2:7]배열을 생성하려면 -2에서 7까지 실행되는 아래 첨자 값.

다음을 사용하여 새로운 배열 값을 구성할 수도 있습니다. 연결 연산자,||.

배열 선택[1,2] || 배열[3,4];
 ?열?
-----------
 1,2,3,4

연결 연산자를 사용하면 단일 토토 사이트 추천가 1차원 배열의 시작이나 끝으로 푸시됩니다. 또한 두 가지를 허용합니다.N차원 배열 또는N-차원 및N+1-차원 배열.

단일 토토 사이트 추천가 토토 사이트 추천의 시작 부분으로 푸시될 때 1차원 배열의 경우 결과는 더 낮은 배열입니다. 오른쪽 피연산자의 하한과 동일한 경계 첨자 아래 첨자, 마이너스 1. 단일 토토 사이트 추천가 1차원 배열의 끝, 결과는 배열입니다. 왼쪽 피연산자의 하한을 유지합니다. 에 대한 예:

SELECT array_dims(1 || ARRAY[2,3]);
 array_dims
------------
 [0:2]
(1줄)

SELECT array_dims(ARRAY[1,2] || 3);
 array_dims
------------
 [1:3]
(1행)

동일한 차원 수를 가진 두 개의 배열이 연결하면 결과는 다음의 하한 첨자를 유지합니다. 왼쪽 피연산자의 외부 차원. 결과는 배열입니다 왼쪽 피연산자의 모든 요소와 그 뒤에 오는 요소로 구성됩니다. 오른쪽 피연산자의 모든 요소. 예를 들면:

SELECT array_dims(ARRAY[1,2] || ARRAY[3,4,5]);
 array_dims
------------
 [1:5]
(1줄)

SELECT array_dims(ARRAY[[1,2],[3,4]] || ARRAY[[5,6],[7,8],[9,0]]);
 array_dims
------------
 [1:5][1:2]
(1행)

N차원 배열 의 시작이나 끝으로 푸시됩니다.N+1차원 배열, 결과는 다음과 같습니다. 위의 요소 배열 사례와 유사합니다. 각각N차원 하위 배열은 본질적으로 의 요소N+1-차원 배열의 외부 차원. 예를 들면:

SELECT array_dims(ARRAY[1,2] || ARRAY[[3,4],[5,6]]);
 array_dims
------------
 [0:2][1:2]
(1행)

함수를 사용하여 배열을 구성할 수도 있습니다.array_prepend, array_append또는array_cat. 처음 두 개만 지원합니다. 1차원 배열이지만array_cat다차원 배열을 지원합니다. 위에서 설명한 연결 연산자는 다음과 같습니다. 이러한 기능을 직접 사용하는 것보다 선호됩니다. 실제로, 함수는 주로 다음을 구현하는 데 사용됩니다. 연결 연산자. 그러나 이들은 다음과 같은 경우에 직접적으로 유용할 수 있습니다. 사용자 정의 집계 생성. 몇 가지 예:

SELECT array_prepend(1, ARRAY[2,3]);
 array_prepend
---------------
 1,2,3

8.10.5. 배열에서 검색하기

배열에서 값을 검색하려면 각 값을 확인해야 합니다 배열의. 크기를 알면 손으로 할 수 있습니다. 배열. 예를 들면:

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;

그러나 이는 대규모 배열의 경우 빨리 지루해지며 배열의 크기가 불확실한 경우에는 도움이 되지 않습니다. 안 대체 방법은에 설명되어 있습니다.섹션 9.17. 위의 쿼리 다음으로 대체될 수 있습니다:

SELECT * sal_emp에서 10000 = 임의(pay_by_quarter);

또한 배열에 모든 항목이 포함된 행을 찾을 수 있습니다. 다음을 포함하는 10000과 동일한 값:

SELECT * sal_emp에서 10000이 있는 곳 = 전체(pay_by_quarter);

팁:배열은 세트가 아닙니다. 특정 검색 배열 토토 사이트 추천는 데이터베이스 설계가 잘못되었다는 신호일 수 있습니다. 각 항목에 대한 행이 있는 별도의 테이블을 사용하는 것이 좋습니다. 그것은 배열 토토 사이트 추천가 될 것입니다. 이것은 더 쉬울 것입니다 검색하고 더 많은 수로 확장할 가능성이 높습니다. 토토 사이트 추천의.

8.10.6. 배열 입력 및 출력 구문

배열 값의 외부 텍스트 표현은 다음과 같이 구성됩니다. I/O 변환에 따라 해석되는 항목 배열의 요소 유형에 대한 규칙과 그에 따른 장식 배열 구조를 나타냅니다. 장식은 곱슬로 구성되어 있습니다. 중괄호({그리고}) 배열 값과 구분 기호 주위 인접한 항목 사이의 문자. 구분 기호 문자는 다음과 같습니다. 보통 쉼표(,) 하지만 다른 것: 그것은에 의해 결정됩니다.typdelim배열의 토토 사이트 추천 유형 설정. (에서 제공되는 표준 데이터 유형 중포스트그레SQL배포, 유형상자세미콜론()을 사용합니다.;) 그러나 다른 모든 것들은 쉼표를 사용합니다.) 다차원 배열, 각 차원(행, 평면, 큐브 등) 자체 수준의 중괄호를 가지며 구분 기호는 다음과 같아야 합니다. 인접한 중괄호 엔터티 사이에 작성됨 수준.

배열 출력 루틴은 주위에 큰따옴표를 넣습니다. 요소 값이 빈 문자열이거나 곱슬곱슬한 문자열을 포함하는 경우 중괄호, 구분 기호 문자, 큰따옴표, 백슬래시 또는 공백. 요소에 큰따옴표 및 백슬래시가 포함되어 있습니다. 값은 백슬래시로 이스케이프됩니다. 숫자 데이터 유형의 경우 큰따옴표는 절대 나타나지 않을 것이라고 가정하는 것이 안전하지만 텍스트 데이터 유형은 다음 중 하나에 대처할 준비가 되어 있어야 합니다. 따옴표의 유무. (이것은 행동의 변화입니다. 7.2 이전부터토토 사이트 추천출시.)

기본적으로 배열의 하한 인덱스 값은 크기는 1로 설정됩니다. 배열의 차원 중 하나에 다음이 있는 경우 하한 인덱스가 1과 같지 않음, 추가 장식 이는 실제 배열 차원이 배열 구조 장식. 이 장식은 정사각형으로 구성되어 있습니다. 대괄호([]29837_29913:) 사이에 구분 기호 문자가 있습니다. 배열 차원 장식 뒤에는 등호()가 옵니다.=). 예를 들면:

선택 1 || ARRAY[2,3] AS 배열;

     배열
---------------
 [0:2]=1,2,3

이 구문은 기본이 아닌 배열을 지정하는 데에도 사용할 수 있습니다 배열 리터럴의 첨자. 예를 들면:

SELECT f1[1][-2][3] AS e1, f1[1][-1][5] AS e2
 FROM (SELECT '[1:1][-2:-1][3:5]=1,2,3,4,5,6'::int[] AS f1) AS ss;

 e1 | e2
----+----
  1 |  6
(1행)

이전에 표시된 것처럼 배열 값을 쓸 때 다음을 수행할 수 있습니다. 개별 배열 요소 주위에 큰따옴표를 씁니다. 당신은반드시그러면 그렇게 하세요 그렇지 않으면 요소 값이 배열 값 구문 분석기를 혼동하게 됩니다. 예를 들어 중괄호, 쉼표(또는 구분 기호가 무엇이든), 큰따옴표, 백슬래시 또는 선행 또는 후행 공백이 있어야 합니다. 이중 인용. 인용문 안에 큰따옴표나 백슬래시를 넣으려면 배열 요소 값 앞에는 백슬래시가 옵니다. 또는 백슬래시 이스케이프를 사용하여 모든 항목을 보호할 수 있습니다. 그렇지 않으면 배열로 간주되는 데이터 문자 구문.

왼쪽 중괄호 앞이나 뒤에 공백을 쓸 수 있습니다 오른쪽 버팀대. 앞이나 뒤에 공백을 쓸 수도 있습니다. 개별 항목 문자열. 이 모든 경우에 공백은 무시됩니다. 그러나 큰따옴표 안의 공백은 요소 또는 공백이 아닌 공백으로 양쪽에 둘러싸여 있습니다. 요소의 문자는 무시되지 않습니다.

참고:당신이 SQL에 작성한 내용을 기억하십시오 명령은 먼저 문자열 리터럴로 해석됩니다. 그런 다음 배열로. 백슬래시 수가 두 배로 늘어납니다. 당신이 필요합니다. 예를 들어,텍스트백슬래시와 큰따옴표, 작성해야 합니다.

삽입 ... 값 ('"\\\\","\\""');

문자열 리터럴 프로세서는 다음 수준 중 하나를 제거합니다. 백슬래시를 사용하여 배열 값 파서에 도착하는 내용을 확인합니다. 처럼 보인다{"\\","\""}. 차례로, 에 공급되는 문자열텍스트데이터 유형의 입력 루틴은 다음과 같습니다.\그리고"각각. (만약 우리가 입력 루틴도 처리되는 데이터 유형으로 작업 특별히 백슬래시를 사용합니다.바이테아용 예를 들어, 최대 8개의 백슬래시가 필요할 수 있습니다. 저장된 배열에 백슬래시 하나를 가져오는 명령 토토 사이트 추천.) 달러 인용(참조섹션 4.1.2.2)을 사용하면 두 배로 늘릴 필요가 없습니다. 백슬래시.

팁:어레이생성자 구문(참조섹션 4.2.10)는 종종 SQL에서 배열 값을 쓸 때 배열 리터럴 구문 명령. 에서어레이, 개인 토토 사이트 추천 값은 동일한 방식으로 작성됩니다. 배열의 구성원이 아닐 때 작성되었습니다.