모든 함수가 a변동성가능성이있는 분류휘발성, 안정적인또는불변. 휘발성이면 기본값입니다.함수 만들기명령은 그렇지 않습니다
A 휘발성함수는 할 수 있습니다
A 안정적인함수는 수정할 수 없습니다휘발성인덱스 스캔에서 사설 토토
an불변함수는 할 수 없습니다선택 ... 여기서 x = 2 + 2can선택 ..., 정수의 기본 사설 토토이기 때문에불변.
최적의 최적화 결과를 위해서는 사설 토토에 레이블을 지정해야합니다
부작용이있는 모든 함수필수레이블이휘발성, 호출을 최적화 할 수 없습니다휘발성값이 내부에서 변경 될 수있는 경우random (), currval (), TimeOfday ().
안정적인and불변간단한 대화식 쿼리를 고려할 때 카테고리불변실제로 그렇지 않은 경우pl/pgsql).
MVCC의 스냅 샷 동작으로 인해 (참조12 장) 전용 함수select명령은 안전하게 표시 될 수 있습니다안정적인, 테이블 중에서 선택하더라도PostgreSQLa안정적인설정된 스냅 샷을 사용한 함수current_timestamp
사설 토토 가족 자격
동일한 스냅 샷 동작이 사용됩니다select내 명령불변함수. 일반적으로 현명하지 않습니다불변불변성이기 때문에 기능PostgreSQL그것을 시행하지 않습니다
일반적인 오류는 함수에 레이블을 지정하는 것입니다불변결과가 a에 의존 할 때TimeZone설정.안정적인대신.
참고 :전PostgreSQL릴리스 8.0, 요구 사항안정적인and불변함수는 데이터베이스를 수정할 수 없습니다select. (이것은 완전히 아닙니다휘발성수정하는 사설 토토안정적인또는불변함수는 데이터베이스 변경 사항이