Postgresql_DB_가이드 30

제약

데이터 유형은 테이블에 저장할 수 있는 데이터의 종류를 제한하는 방법입니다. 그러나 많은 응용 프로그램에서 제공하는 제약 조건이 너무 조잡합니다. 예를 들어 제품 가격이 포함된 열은 양수 값만 허용해야 합니다. 그러나 양수만 허용하는 표준 데이터 유형은 없습니다. 또 다른 문제는 다른 열 또는 행과 관련하여 열 데이터를 제한할 수 있다는 것입니다. 예를 들어, 제품 정보가 포함된 테이블에는 각 제품 번호에 대해 하나의 행만 있어야 합니다. 이를 위해 SQL을 사용하여 열과 테이블에 대한 제약 조건을 정의할 수 있습니다. 제약 조건을 사용하면 테이블의 데이터를 원하는 만큼 제어할 수 있습니다. 사용자가 제약 조건을 위반하는 열에 데이터를 저장하려고 하면 오류가 발생합니다. 이는 값이 기본값 정의에서 나온 ..

생성된 열

생성된 열은 항상 다른 열에서 계산되는 특수 열입니다. 따라서 테이블에 대한 뷰와 열에 대한 것입니다. 생성된 열에는 저장 열과 가상 열의 두 가지 종류가 있습니다. 저장된 생성 열은 작성(삽입 또는 업데이트)될 때 계산되고 일반 열인 것처럼 저장소를 차지합니다. 가상 생성 열은 스토리지를 차지하지 않으며 읽을 때 계산됩니다. 따라서 가상 생성 열은 뷰와 유사하고 저장된 생성 열은 구체화된 뷰와 유사합니다(항상 자동으로 업데이트된다는 점만 제외). PostgreSQL은 현재 저장된 생성 열만 구현합니다. 생성된 열을 생성하려면 의 GENERATED ALWAYS AS절을 사용하십시오 CREATE TABLE. 예를 들면 다음과 같습니다. CREATE TABLE 사람( ..., height_cm 숫자, hei..

기본값

열에 기본값을 할당할 수 있습니다. 새 행이 생성되고 일부 열에 값이 지정되지 않으면 해당 열이 각각의 기본값으로 채워집니다. 데이터 조작 명령은 해당 값이 무엇인지 알 필요 없이 열을 기본값으로 설정하도록 명시적으로 요청할 수도 있습니다. (데이터 조작 명령에 대한 자세한 내용은 6장 에 있습니다.) 기본값이 명시적으로 선언되지 않은 경우 기본값은 null 값입니다. null 값은 알 수 없는 데이터를 나타내는 것으로 간주될 수 있기 때문에 일반적으로 의미가 있습니다. 테이블 정의에서 기본값은 열 데이터 유형 뒤에 나열됩니다. 예를 들어: CREATE TABLE 제품( product_no 정수, 이름 텍스트, 가격 숫자 기본값 9.99 ); 기본값은 표현식이 될 수 있으며 기본값이 삽입될 때마다 평가됩..

데이터 정의

관계형 데이터베이스의 테이블은 종이에 있는 테이블과 매우 유사합니다. 행과 열로 구성됩니다. 열의 수와 순서는 고정되어 있으며 각 열에는 이름이 있습니다. 행 수는 가변적입니다. 이는 주어진 순간에 저장되는 데이터의 양을 반영합니다. SQL은 테이블의 행 순서에 대해 어떠한 보장도 하지 않습니다. 테이블을 읽을 때 정렬이 명시적으로 요청되지 않는 한 행은 지정되지 않은 순서로 나타납니다. 이에 대해서는 7장 에서 다룹니다 . 또한 SQL은 행에 고유 식별자를 할당하지 않으므로 테이블에 완전히 동일한 여러 행이 있을 수 있습니다. 이것은 SQL의 기초가 되지만 일반적으로 바람직하지 않은 수학적 모델의 결과입니다. 이 장의 뒷부분에서 우리는 이 문제를 처리하는 방법을 볼 것입니다. 각 열에는 데이터 유형이 ..

함수 호출

PostgreSQL 을 사용하면 이름이 지정된 매개변수가 있는 함수를 위치 또는 이름 표기법 을 사용하여 호출할 수 있습니다 . 명명된 표기법은 매개변수와 실제 인수 간의 연결을 보다 명확하고 안정적으로 만들기 때문에 많은 수의 매개변수가 있는 함수에 특히 유용합니다. 위치 표기법에서 함수 호출은 함수 선언에 정의된 것과 동일한 순서로 인수 값으로 작성됩니다. 명명된 표기법에서 인수는 이름별로 함수 매개변수와 일치하며 임의의 순서로 작성할 수 있습니다. 각 표기법에 대해 섹션 10.3 에 설명된 함수 인수 유형의 영향도 고려하십시오 . 두 표기법 모두에서 함수 선언에 제공된 기본값을 갖는 매개변수는 호출에 전혀 기록될 필요가 없습니다. 그러나 이것은 매개변수의 조합을 생략할 수 있기 때문에 명명된 표기법..

유형 캐스트

유형 캐스트는 한 데이터 유형에서 다른 데이터 유형으로의 변환을 지정합니다. PostgreSQL 은 유형 캐스트에 대해 두 가지 동등한 구문을 허용합니다. 캐스트 ( expressionAS type) expression::type CAST구문은 SQL을 따릅니다 . 구문 ::은 과거 PostgreSQL 사용입니다. 알려진 형식의 값 식에 캐스트가 적용되면 런타임 형식 변환을 나타냅니다. 적절한 유형 변환 작업이 정의된 경우에만 캐스트가 성공합니다. 이것은 섹션 4.1.2.7 에 표시된 대로 상수와 함께 캐스트를 사용하는 것과 미묘하게 다릅니다 . 장식되지 않은 문자열 리터럴에 적용된 캐스트는 리터럴 상수 값에 대한 유형의 초기 할당을 나타내므로 모든 유형에 대해 성공합니다(문자열 리터럴의 내용이 데이터 ..

창 함수 호출

창 함수 호출 은 쿼리에 의해 선택된 행의 일부에 대한 집계 유사 함수의 적용을 나타냅니다 . 비 윈도우 집계 호출과 달리 이것은 선택한 행을 단일 출력 행으로 그룹화하는 것과 관련이 없습니다. 각 행은 쿼리 출력에서 ​​개별적으로 유지됩니다. PARTITION BY그러나 창 함수는 창 함수 호출의 그룹화 사양( 목록)에 따라 현재 행 그룹의 일부가 될 모든 행에 액세스할 수 있습니다 . 창 함수 호출의 구문은 다음 중 하나입니다. function_name([ expression[ , expression... ] ]) [ 필터 ( WHERE filter_clause) ] 오버 ([ [ , ... ] ]) [ 필터 ( WHERE ) ] 오버 ( ) ( * ) [ 필터 ( WHERE ) ] 오버 ( * ) ..

연산자 호출

연산자 호출에는 두 가지 가능한 구문이 있습니다. expression operator expression(이진 중위 연산자) operator expression(단항 접두사 연산자) 여기서 토큰 은 4.1.3절의operator 구문 규칙을 따르 거나 키워드 , , 및 , 또는 형식의 정규화된 연산자 이름 중 하나입니다.ANDORNOT OPERATOR(schema.operatorname) 어떤 특정 연산자가 존재하고 단항인지 이진인지는 시스템이나 사용자가 정의한 연산자에 따라 다릅니다. 9장 에서는 내장 연산자에 대해 설명합니다. 4.2.6. 함수 호출 함수 호출의 구문은 함수 이름(스키마 이름으로 정규화됨) 뒤에 괄호로 묶인 인수 목록이 옵니다. function_name([ expression[ , ex..

4.2. 값 표현식

SELECT값 표현식은 명령의 대상 목록, 또는 의 새 열 값 INSERT또는 UPDATE여러 명령의 검색 조건 과 같은 다양한 컨텍스트에서 사용됩니다. 값 표현식 의 결과는 테이블 표현식(테이블)의 결과와 구별하기 위해 때때로 스칼라 라고도 합니다. 따라서 값 표현식은 스칼라 표현식 (또는 단순히 표현식 ) 이라고도 합니다. 표현식 구문을 사용하면 산술, 논리, 집합 및 기타 연산을 사용하여 기본 부분에서 값을 계산할 수 있습니다. 값 표현식은 다음 중 하나입니다. 상수 또는 리터럴 값 열 참조 함수 정의 또는 준비된 문의 본문에 있는 위치 매개변수 참조 첨자 표현 필드 선택 표현식 연산자 호출 함수 호출 집계 표현식 윈도우 함수 호출 A형 캐스트 데이터 정렬 표현식 스칼라 서브 쿼리 배열 생성자 행 ..

첨자

표현식이 배열 유형의 값을 생성하는 경우 다음을 작성하여 배열 값의 특정 요소를 추출할 수 있습니다. expression[ subscript] 또는 여러 인접 요소( " 배열 슬라이스 " )를 다음과 같이 작성하여 추출할 수 있습니다. expression[ lower_subscript: upper_subscript] (여기서 대괄호 [ ]는 문자 그대로 나타나도록 되어 있습니다.) 각각 subscript은 그 자체가 표현식이며 가장 가까운 정수 값으로 반올림됩니다. 일반적으로 배열 expression은 괄호로 묶어야 하지만 첨자할 표현식이 열 참조 또는 위치 매개변수일 경우 괄호를 생략할 수 있습니다. 또한 원래 배열이 다차원인 경우 여러 첨자를 연결할 수 있습니다. 예를 들어: mytable.array..