누구든지 다음의 차이점을 요약 해 주시겠습니까?
http://www.postgresql.org/docs/9.1/static/xfunc-sql.html
과
http://www.postgresql.org/docs/9.1/static/plpgsql.html
?
중요 점:
- 개념상의 차이
- 문제가있는 가족, 사용 편의성
- 정치적 이슈
누구든지 다음의 차이점을 요약 해 주시겠습니까?
http://www.postgresql.org/docs/9.1/static/xfunc-sql.html
과
http://www.postgresql.org/docs/9.1/static/plpgsql.html
?
중요 점:
답변:
PL / PgSQL 및 일반 SQL 함수는 모두 더 큰 도구 세트의 일부이므로 해당 컨텍스트에서 확인해야합니다. 나는 복잡성과 비용의 상승에 따른 오름차순 규모의 힘으로 생각하는 경향이 있습니다. 여기서 작업을 잘 수행하는 가장 간단한 도구를 사용해야합니다.
LISTEN
하고NOTIFY
그것을 얘기.함수가 필요하다고 생각할 때 뷰가 충분하는 경우가 많습니다. 그것이 매우 비싸더라도SELECT
전체 뷰에 뷰를 WHERE
참조하는 쿼리의 절은 일반적으로 뷰로 푸시되어 쿼리 계획이 매우 다를 수 있습니다. SQL 함수를 뷰로 변환하여 성능이 크게 향상되었습니다.
뷰를 사용할 수 없으며 SQL 함수를 고려해야 할 주요 시점은 다음과 같습니다.
WHERE
절로 매개 변수 (예 : WITH
표현식 내의 매개 변수)SECURITY DEFINER
함수security_barrier
PostgreSQL 9.2 이상의 보기로는 충분하지 않습니다.이러한 대부분의 작업에서 일반 SQL 함수는 정상적으로 작동하며 PL / PgSQL보다 읽기 쉽습니다. 선언 된 ( STABLE
또는 선언 IMMUTABLE
되지 않은 STRICT
또는 SECURITY DEFINER
) SQL 함수 도 호출 문에 인라인 될 수 있습니다. 이로 인해 함수 호출 오버 헤드가 제거되고 호출 함수의 WHERE 조건이 옵티 마이저에 의해 SQL 함수로 푸시 다운 될 때 성능이 크게 향상 될 수 있습니다. 작업에 충분할 때마다 SQL 함수를 사용하십시오.
SQL 함수가 작업을 수행하지 않는 주요 시간은 많은 로직이 필요할 때입니다. CASE
명령문으로 표현할 수없는 다른 연산 , 계산 된 결과의 많은 재사용, 청크로부터 값 생성, 오류 처리 등 PL / PgSQL이 편리합니다. SQL 함수를 사용할 수 없거나 다음과 같이 적합하지 않은 경우 PL / PgSQL을 선택하십시오.
EXECUTE
명령문을 통한 동적 SQL 및 동적 DDLRAISE
로그 또는 클라이언트에 대한 오류 / 경고를 원할 때EXCEPTION
전체 트랜잭션을 오류로 종료하지 않고 블록으로CASE ... WHEN
잘WITH
과 CTE를CTE (공통 테이블 표현식), 특히 쓰기 가능한 CTE를 WITH RECURSIVE
사용하면 SQL이 훨씬 표현적이고 강력하기 때문에 PL / PgSQL을 사용하는 것보다 훨씬 적게 사용합니다. 뷰와 일반 SQL 함수를 훨씬 더 많이 사용합니다. 일반 SQL 함수는 둘 이상의 명령문을 포함 할 수 있음을 기억해야합니다. 마지막 문장은 함수의 결과입니다.