Postgresql 9.3.25 문서화 | ||||
---|---|---|---|---|
토토 캔 : 문서 : 9.3 : JSON 유형 | PostgreSQL : 문서 : 9.3 : 데이터 윈 토토 | 8 장. 데이터 유형 | PostgreSQL : 문서 : 9.3 : 범퍼카 토토 유형 |
postgresqla의 열을 허용합니다 가변 길이의 다차원 토토 꽁 머니로 정의되는 테이블. 내장 또는 사용자 정의 기본 유형, 열거 유형의 토토 꽁 머니 또는 복합 유형을 만들 수 있습니다. 도메인의 토토 꽁 머니은 아직 없습니다 지원.
토토 꽁 머니 유형의 사용을 설명하기 위해이 테이블을 만듭니다.
테이블 생성 sal_emp ( 이름 텍스트, pay_by_quarter 정수 [], 일정 텍스트 [] [] );
표시된대로 토토 꽁 머니 데이터 유형은 Square를 추가하여 명명됩니다. 브래킷 ([])의 데이터 유형 이름으로 토토 꽁 머니 요소. 위의 명령은라는 테이블을 만듭니다.sal_emp유형의 열이있는텍스트(이름), a 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... '
여기서delim는 구분 기자입니다 그 유형의 문자, 그 유형에 기록 된대로pg_type입력. 표준 데이터 유형 중 제공PostgreSQL배포, 모두 쉼표를 사용합니다 (,) 유형Box세미콜론을 사용합니다 (;). 각val는 토토 꽁 머니 요소의 상수입니다 유형 또는 서브 어레이. 토토 꽁 머니 상수의 예는 다음과 같습니다.
'1,2,3, 4,5,6, 7,8,9'
이 상수는 2 차원, 3x3 토토 꽁 머니로 구성되어 있습니다 정수의 세 가지 서브 배달.
어레이 상수의 요소를 null로 설정하려면 쓰기NULL요소 값의 경우. (모든 위 또는 의 소문자 변형NULL할 것입니다.) if 당신은 실제 문자열 값을 원합니다"null", 주위에 이중 인용문을 넣어야합니다.
(이러한 종류의 토토 꽁 머니 상수는 실제로 특별한 경우 일뿐입니다. 논의 된 일반 유형 상수 중섹션 4.1.2.7. 상수는 처음에 문자열로 취급됩니다 토토 꽁 머니 입력 변환 루틴으로 전달되었습니다. 명시 적 유형 사양이 필요할 수 있습니다.)
이제 우리는 일부를 보여줄 수 있습니다삽입진술 :
sal_emp에 삽입하십시오 값 ( 'Bill', '10000, 10000, 10000, 10000', ' "meeting", "lunch", "Training", "Presentation"'); sal_emp에 삽입하십시오 값 ( '캐롤', '20000, 25000, 25000, 25000', ' "아침 식사", "컨설팅", "회의", "점심"');
이전 두 삽입물의 결과는 다음과 같습니다.
SELECT * FROM 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 행)
토토 꽁 머니 첨자 번호는 정사각형 괄호 안에 기록됩니다. 기본적으로PostgreSQLa 토토 꽁 머니에 대한 1 기반 번호 컨벤션, 즉 토토 꽁 머니n요소는로 시작합니다.토토 꽁 머니 [1]토토 꽁 머니 [n].
이 쿼리는 모든 직원의 3 분기 급여를 검색합니다.
sal_emp에서 pay_by_quarter [3]를 선택하십시오. pay_by_quarter --------------- 10000 25000 (2 줄)
토토 꽁 머니의 임의의 직사각형 조각에 액세스 할 수 있습니다. 서브 사업. 토토 꽁 머니 슬라이스는 쓰기로 표시됩니다17799_17812:상한하나 이상의 토토 꽁 머니의 경우 치수. 예를 들어이 쿼리는 첫 번째 항목을 검색합니다 주중 첫 이틀 동안의 빌의 일정 :
Sal_emp에서 일정을 선택하십시오 [1 : 2] [1 : 1] 여기서 name = 'bill'; 일정 ------------------------- meeting, training
차원이 슬라이스로 작성된 경우, 즉 결장이 포함됩니다. 그런 다음 모든 치수는 슬라이스로 처리됩니다. 가지고있는 모든 차원 단일 숫자 (결장 없음) 만 1에서 지정된 번호. 예를 들어,[2]is 로 취급[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.
모든 토토 꽁 머니 값의 현재 치수를 검색 할 수 있습니다.
그만큼array_dims
기능 :
20111_20222
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-차원 및 ann+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 행)
23631_23929
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-차원 토토 꽁 머니입니다 AN의 시작 또는 끝으로 밀려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
간단한 경우, 위에서 논의한 연결 연산자는 IS입니다 이러한 기능을 직접 사용하는 것보다 선호됩니다. 그러나. 왜냐하면 연결 연산자는 세 가지 사례를 모두 제공하기 위해 과부하되어 있습니다. 기능 중 하나를 사용하는 것이 도움이되는 상황이 있습니다. 모호성을 피하기 위해. 예를 들어 고려 :
토토 꽁 머니 선택 [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;
그러나 이것은 큰 토토 꽁 머니에 대해 빠르게 지루하게됩니다. 토토 꽁 머니의 크기를 알 수없는 경우 도움이되지 않습니다. 대안 메소드는에 설명되어 있습니다.PostgreSQL : 문서 : 9.3 : 행 및 스포츠 토토 비교. 위의 쿼리는 다음으로 대체 될 수 있습니다.
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-51.
를 사용하여 토토 꽁 머니도 검색 할 수도 있습니다.&&왼쪽 여부를 확인하는 연산자 피연산자는 오른쪽 피연산자와 겹칩니다. 예를 들어:
SELECT *에서 SAL_EMP에서 PAY_BY_QUARTER && ARRAY [10000];
이 및 기타 토토 꽁 머니 연산자는에 자세히 설명되어 있습니다.섹션 9.18. 가속화 될 수 있습니다 에 설명 된대로 적절한 지수섹션 11.2.
팁 :토토 꽁 머니이 설정되지 않았습니다. 특정 토토 꽁 머니 검색 요소는 데이터베이스 잘못 디자인의 표시 일 수 있습니다. 사용을 고려하십시오 토토 꽁 머니이 될 각 항목마다 행이있는 별도 테이블 요소. 검색하기가 더 쉬우 며 확장 될 가능성이 높습니다. 많은 수의 요소에 더 좋습니다.
토토 꽁 머니 값의 외부 텍스트 표현은 I/O 변환 규칙에 따라 해석되는 항목 토토 꽁 머니의 요소 유형과 토토 꽁 머니 구조. 장식은 곱슬 교정기로 구성됩니다 (and) 주위 인접한 항목 사이의 토토 꽁 머니 값과 구분 기호 문자. 구분자 문자는 일반적으로 쉼표입니다 (,) 그러나 다른 것이 될 수 있습니다 : 그것은 다음과 같이 결정됩니다. 그만큼typdelim토토 꽁 머니 설정 요소 유형. 에 제공된 표준 데이터 유형 중postgresql배포, 모두 a 유형을 제외한 쉼표Box, a 세미콜론 (;). 다차원에서 토토 꽁 머니, 각 차원 (행, 평면, 큐브 등)은 자체 레벨을 얻습니다. 곱슬 괄호와 구분 제는 인접한 사이에 기록되어야합니다. 같은 수준의 곱슬 브레이시 엔티티.
토토 꽁 머니 출력 루틴은 요소 주위에 이중 인용문을 표시합니다. 값 빈 줄 인 경우 값, 곱슬 버팀대, 구분 기 문자, 이중 인용구, 백 슬래시 또는 공백 또는 일치 단어null. 이중 인용문 및 요소 값에 내장 된 백 슬래시는 백 슬래시로 향합니다. 숫자 데이터 유형의 경우 이중 따옴표가 나타나지 않지만 텍스트 데이터 유형의 경우 준비해야합니다. 인용문의 유무에 대처하십시오.
기본적으로 토토 꽁 머니 치수의 하한 인덱스 값 하나로 설정됩니다. 다른 하한이있는 토토 꽁 머니을 나타내려면 토토 꽁 머니 첨자 범위는 글을 쓰기 전에 명시 적으로 지정할 수 있습니다 토토 꽁 머니 내용. 이 장식은 정사각형 괄호로 구성됩니다 ([]) 각 토토 꽁 머니 차원 주변의 하위 그리고 콜론 (가있는 상한):) 사이의 구분자 문자. 토토 꽁 머니 치수 장식은입니다 그 다음에 동등한 부호가 뒤 따릅니다 (=). 을 위한 예:
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의 인식을 억제하려면NULLas 널.
이전에 표시된대로 토토 꽁 머니 값을 작성할 때 사용할 수 있습니다. 개별 토토 꽁 머니 요소 주변의 이중 인용문. 너필수요소 값이 있으면 그렇게하십시오 그렇지 않으면 토토 꽁 머니 값 파서를 혼동하십시오. 예를 들어, 요소 곱슬 버팀대, 쉼표 (또는 데이터 유형의 구분 기호를 포함합니다 문자), 이중 인용문, 백 슬래시 또는 선도 또는 후행 공백은 두 번 인용되어야합니다. 빈 줄과 줄 단어 일치NULL인용해야합니다. 도. 인용 된 토토 꽁 머니 요소에 이중 견적 또는 백 슬래시를 넣으려면 값은 백 슬래시로 앞에 있습니다. 또는 피할 수 있습니다 모든 데이터 문자를 보호하기 위해 Backslash-Escaping을 인용하고 사용합니다 그렇지 않으면 토토 꽁 머니 구문으로 간주됩니다.
왼쪽 버팀대 앞이나 오른쪽 후에 공백을 추가 할 수 있습니다. 중괄호. 개인 전후에 공백을 추가 할 수도 있습니다. 항목 문자열. 이 모든 경우에 공백은 무시됩니다. 그러나, 이중 인용 요소 내의 공백 또는 둘러싸여 있습니다 요소의 비 whitescace 문자에 의한 양쪽은 무시.
팁 :the토토 꽁 머니생성자 구문 (참조섹션 4.2.12)는 종종 토토 꽁 머니 문자보다 작업하기가 더 쉽습니다. SQL 명령에 토토 꽁 머니 값을 작성할 때 구문. 안에토토 꽁 머니, 개별 요소 값이 작성됩니다 토토 꽁 머니의 멤버가 아닌 경우와 마찬가지로