모든 함수는 a에 있습니다.변동성가능성이있는 분류휘발성, 안정적인또는불변성. 휘발성이면 기본값입니다.함수 만들기명령은 a를 지정하지 않습니다 범주. 변동성 범주는 최적화에 대한 약속입니다 기능의 행동에 대해 :
a휘발성함수를 수행 할 수 있습니다 데이터베이스 수정을 포함한 모든 것. 돌아올 수 있습니다 동일하게 연속 통화에 대한 다른 결과 논쟁. Optimizer는에 대해 가정하지 않습니다 그러한 기능의 행동. 휘발성 기능을 사용하는 쿼리 값이있는 모든 행에서 기능을 다시 평가합니다. 필요합니다.
a안정적인함수는 수정할 수 없습니다 데이터베이스 및 동일한 결과를 반환하도록 보장됩니다. 단일의 모든 통화에 대해 동일한 주장이 주어지면 주변 쿼리. 이 범주를 사용하면 Optimizer가 가능합니다 단일 내에서 함수의 여러 호출을 최적화합니다. 질문. 특히 표현식을 사용하는 것이 안전합니다 인덱스 스캔 조건에 이러한 함수를 포함합니다. (부터 인덱스 스캔은 비교 값을 한 번만 평가합니다. 각 행에서 한 번이 아니라 A 사용하는 것은 유효하지 않습니다.휘발성인덱스 스캔에서 토토 사이트 추천 상태.)
an불변함수는 할 수 없습니다 데이터베이스를 수정하고 동일하게 반환 할 수 있습니다. 같은 주장이 영원히 주어졌습니다. 이 카테고리 최적화기가 a 쿼리는 끊임없는 인수로 호출합니다. 예를 들어, 쿼리 좋다선택 ... 여기서 x = 2 + 2can 시야에서 단순화선택 ... 여기서 x = 4, 정수의 기본 함수이기 때문에 추가 연산자가 표시불변성.
최적의 최적화 결과를 위해서는 기능에 레이블을 지정해야합니다 가장 엄격한 변동성 범주로 유효합니다 그들을.
부작용이있는 모든 함수필수라벨링휘발성, 호출을 최적화 할 수 없습니다 떨어져 있는. 부작용이없는 함수조차도 레이블을 지정해야합니다휘발성값이 내부에서 변경 될 수있는 경우 단일 쿼리; 몇 가지 예는입니다.random (), currval (), TimeOfday ().
안정적인및불변간단한 대화식 쿼리를 고려할 때 카테고리 계획 및 즉시 실행 : 많은 것은 중요하지 않습니다. 기능은 계획 중에 또는 쿼리 중에 한 번 실행됩니다. 실행 시작. 그러나 계획이 있다면 큰 차이가 있습니다. 나중에 저장 및 재사용. 함수 라벨링불변실제로 그렇지 않은 경우 계획 중에 상수로 조기에 접어서 계획의 후속 사용 중에는 오래된 가치가 재사용됩니다. 준비된 명령문을 사용하거나 사용할 때 위험이 있습니다. 캐시하는 토토 사이트 추천 언어 (예 :pl/pgsql).
MVCC의 스냅 샷 동작으로 인해 (참조12 장) 전용 함수select명령은 안전하게 표시 될 수 있습니다안정적인, 테이블 중에서 선택하더라도
동시 쿼리에 의해 수정을 받고 있습니다.PostgreSQLa를 실행합니다.안정적인설정된 스냅 샷을 사용한 함수
호출 쿼리, 따라서 고정 된보기가 보입니다.
해당 쿼리 전체의 데이터베이스. 또한current_timestamp
토토 사이트 추천 가족 자격
안정적으로, 그들의 값은
거래.
동일한 스냅 샷 동작이 사용됩니다select내 명령불변함수. 일반적으로 현명하지 않습니다 AN 내 데이터베이스 테이블에서 선택불변불변성이기 때문에 전혀 기능합니다 테이블 내용이 변경되면 파손됩니다. 하지만,PostgreSQL그것을 시행하지 않습니다 당신은 그렇게하지 않습니다.
일반적인 오류는 함수에 레이블을 지정하는 것입니다불변결과가 a에 의존 할 때 구성 매개 변수. 예를 들어, 조작하는 함수 타임 스탬프에는에 의존하는 결과가있을 수 있습니다.TimeZone설정. 을 위한 안전, 그러한 토토 사이트 추천은 레이블이 지정되어야합니다안정적인대신.
참고 :전PostgreSQL릴리스 8.0, 요구 사항 저것안정적인and불변성함수는 데이터베이스를 수정할 수 없습니다 시스템에 의해 시행되지 않았습니다. 릴리스 8.0 SQL 기능 및 절차 적 언어 기능이 필요합니다 이 범주는 이외의 SQL 명령을 포함하지 않는 것입니다.select. (이것은 완전히 아닙니다 방탄 테스트, 그러한 토토 사이트 추천은 여전히 호출 할 수 있기 때문에휘발성수정하는 토토 사이트 추천 데이터 베이스. 그렇게하면를 찾을 수 있습니다.안정적인또는불변성함수는 데이터베이스 변경 사항이 함수라고합니다.)