이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 36.7. 사설 토토 사이트 변동성 범주버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

34.6. 토토 사이트 순위 변동성 카테고리

모든 함수는 a에 있습니다.변동성가능성이있는 분류휘발성, 안정적인또는불변성. 휘발성이면 기본값입니다.함수 만들기명령은 그렇지 않습니다 범주를 지정합니다. 변동성 범주는 기능의 동작에 대한 최적화 :

  • a휘발성함수를 수행 할 수 있습니다 데이터베이스 수정을 포함한 모든 것. 돌아올 수 있습니다 동일하게 연속 통화에 대한 다른 결과 논쟁. Optimizer는에 대해 가정하지 않습니다 그러한 기능의 행동. 휘발성 기능을 사용하는 쿼리 값이있는 모든 행에서 기능을 다시 평가합니다. 필요합니다.

  • a안정적인함수는 수정할 수 없습니다 데이터베이스 및 동일한 결과를 반환하도록 보장됩니다. 하나의 모든 행에 대해 동일한 주장이 주어지면 성명. 이 범주를 사용하면 Optimizer가 최적화 할 수 있습니다 단일 통화로 토토 사이트 순위의 여러 호출. ~ 안에 특히 그러한 표현을 사용하는 것이 안전합니다. 인덱스 스캔 조건에서 토토 사이트 순위. (인덱스 스캔 이후 비교 값을 한 번만 한 번만 평가합니다. 각 행, a 사용하는 것은 유효하지 않습니다.휘발성인덱스 스캔에서 토토 사이트 순위 상태.)

  • an불변함수는 할 수 없습니다 데이터베이스를 수정하고 동일하게 반환 할 수 있습니다. 같은 주장이 영원히 주어졌습니다. 이 카테고리 최적화기가 a 쿼리는 끊임없는 인수로 호출합니다. 예를 들어, 쿼리 좋다선택 ... 여기서 x = 2 + 2can 시야에서 단순화선택 ... 여기서 x = 4, 정수의 기본 토토 사이트 순위이기 때문에 추가 연산자가 표시불변.

최적의 최적화 결과를 위해서는 기능에 레이블을 지정해야합니다 가장 엄격한 변동성 범주로 유효합니다 그들을.

부작용이있는 모든 함수필수라벨링휘발성, 호출을 최적화 할 수 없습니다 떨어져 있는. 부작용이없는 함수조차도 레이블을 지정해야합니다휘발성값이 내부에서 변경 될 수있는 경우 단일 쿼리; 몇 가지 예는입니다.random (), currval (), TimeOfday ().

또 다른 중요한 예는입니다.current_timestamp토토 사이트 순위 가족 자격 처럼안정적인, 그 값은 그렇지 않기 때문입니다 거래 내에서 변경.

|안정적인and불변성간단한 대화식 쿼리를 고려할 때 카테고리 계획 및 즉시 실행 : 많은 것은 중요하지 않습니다. 기능은 계획 중에 또는 쿼리 중에 한 번 실행됩니다. 실행 시작. 그러나 계획이 있다면 큰 차이가 있습니다. 나중에 저장 및 재사용. 함수 라벨링불변실제로는 허용되지 않을 때 계획 중에 상수로 조기에 접어 계획의 후속 사용 중에 오래된 가치가 재사용됩니다. 준비된 명령문을 사용하거나 사용할 때 위험이 있습니다. 캐시하는 토토 사이트 순위 언어 (예 :pl/pgsql).

SQL 또는 모든 표준으로 작성된 기능 절차 언어에는 두 번째 중요한 속성이 있습니다 변동성 범주, 즉 가시성에 의해 결정됩니다 SQL 명령에 의해 작성된 모든 데이터 변경 기능을 호출합니다. 에이휘발성함수는 그러한 변경 사항이 보입니다. A안정적인또는불변함수는 그렇지 않습니다. 이것 동작은 MVCC의 스냅 샷 동작을 사용하여 구현됩니다 (보다토토 사이트 순위 : 문서 : 8.4 : 동시성 제어) :안정적인and불변성함수는 시작 시점에서 설정된 스냅 샷을 사용합니다. 쿼리 호출휘발성함수 각 쿼리 시작시 새로운 스냅 샷을 얻습니다. 실행하다.

참고 :C로 작성된 함수는 스냅 샷을 관리 할 수 ​​있습니다 그러나 그들은 원하지만 일반적으로 C를 만드는 것이 좋습니다. 토토 사이트 순위도 이런 식으로 작동합니다.

이 스냅 샷 동작으로 인해 토토 사이트 순위이 포함되어 있습니다 오직select명령은 안전하게있을 수 있습니다 두드러진안정적인에서 선택하더라도 동시에 수정 될 수있는 테이블 쿼리.PostgreSQL실행됩니다 A의 모든 명령안정적인토토 사이트 순위 사용 토토 사이트 순위 호출 쿼리를 위해 설정된 스냅 샷이므로 해당 쿼리 전체에서 데이터베이스의 고정 된보기를 참조하십시오.

동일한 스냅 샷 동작이 사용됩니다select내 명령불변함수. 일반적으로 현명하지 않습니다 AN 내 데이터베이스 테이블에서 선택불변성불변성이기 때문에 전혀 기능합니다 테이블 내용이 변경되면 파손됩니다. 하지만,postgresql그것을 시행하지 않습니다 당신은 그렇게하지 않습니다.

일반적인 오류는 함수에 레이블을 지정하는 것입니다불변성결과가 a에 의존 할 때 구성 매개 변수. 예를 들어, 조작하는 함수 타임 스탬프에는에 의존하는 결과가있을 수 있습니다.TimeZone설정. 안전을 위해서는 그러한 토토 사이트 순위이 레이블이 지정되어야합니다안정적인대신.

참고 :PostgreSQL릴리스 8.0, 요구 사항 저것안정적인and불변성함수는 데이터베이스를 수정할 수 없습니다 시스템에 의해 시행되지 않았습니다. 8.0 이상 출시됩니다 SQL 기능과 절차 적 언어를 요구하여 시행하십시오 이 범주의 함수는 SQL 명령을 포함하지 않습니다 이외의select. (이것은 아닙니다 그러한 토토 사이트 순위은 여전히 ​​가능하기 때문에 완전히 방탄 테스트 부르다휘발성수정하는 토토 사이트 순위 데이터베이스. 그렇게하면를 찾을 수 있습니다.안정적인또는불변함수는 데이터베이스 변경은 호출 된 함수에 의해 적용되므로 변경됩니다 스냅 샷에 숨겨져 있습니다.)