토토 베이/pgsql로드 가능합니다 에 대한 절차 언어PostgreSQL데이터베이스 시스템. 디자인 목표 의토토 베이/pgsqla 로드 가능한 절차 적 언어
함수를 생성하고 트리거를 만드는 데 사용될 수 있습니다 절차,
제어 구조 추가SQL언어,
복잡한 계산을 수행 할 수 있습니다.
모든 사용자 정의 유형, 함수 및 운영자,
서버에서 신뢰할 수 있도록 정의 할 수 있습니다.
사용하기 쉽습니다.
입력/출력 변환 및 계산 기능을 제외하고 사용자 정의 유형의 경우 C에서 정의 할 수있는 모든 것 언어 기능은 또한로 수행 할 수 있습니다.토토 베이/pgsql. 예를 들어 가능합니다 복잡한 조건부 계산 기능을 작성하고 나중에 사용하십시오 연산자를 정의하거나 색인 표현식으로 사용합니다.
the토토 베이/pgsql전화 처리기 함수의 소스 텍스트를 구문 분석하고 내부를 생성합니다 이진 명령 트리 기능이 처음으로 호출되는 경우 (각 세션 내에서). 지침 트리는 완전히 번역됩니다 그만큼토토 베이/pgsql진술 구조이지만 개인SQL표현 및SQL함수에 사용 된 명령은 그렇지 않습니다 즉시 번역.
각 표현 및SQL명령은 기능에 처음 사용됩니다.
그만큼토토 베이/pgsql통역사
준비된 실행 계획을 만듭니다 (사용SPI관리자SPI_PREPARE
andSPI_SAVEPLAN
기능).그 표현을 후속 방문 또는
준비된 계획을 재사용하십시오. 따라서 기능
많은 진술을 포함하는 조건부 코드
실행 계획이 필요할 수 있습니다.
평생 동안 실제로 사용되는 계획
데이터베이스 연결. 이것은 총계를 실질적으로 줄일 수 있습니다
실행 계획을 구문 분석하고 생성하는 데 필요한 시간
A의 진술을 위해토토 베이/pgsql함수. 단점은 그게됩니다
특정 표현식 또는 명령의 오류는 감지되지 않을 수 있습니다.
함수의 해당 부분이 실행 중에 도달 할 때까지.
한 번토토 베이/pgsql함수의 특정 명령에 대한 실행 계획은 데이터베이스 연결의 수명에 대한 계획을 재사용하십시오. 이것 일반적으로 성능의 승리이지만 일부는 문제 데이터베이스 스키마를 동적으로 변경하는 경우. 을 위한 예:
create function populate () 정수를 $$로 반환합니다 선언하다 - 선언 시작하다 my_function ()을 수행하십시오. 끝; $$ 언어 plpgsql;
위의 함수를 실행하면 OID를 참조합니다.
을 위한my_function ()
에 대한 실행 계획공연진술. 나중에 떨어지면
재현my_function ()
, thepopulate ()
할 수 없습니다
찾다my_function ()
더 이상. 너
그런 다음 재현해야 할 것입니다populate ()
또는 적어도 새 데이터베이스를 시작하십시오
세션이 새로 컴파일되도록 세션. 또 다른 방법
이 문제는 사용하는 것입니다생성 또는
기능 교체정의를 업데이트 할 때my_function
(함수가있을 때"대체", 그 OID는 아닙니다
변경).
니까토토 베이/pgsql저장 이러한 방식으로 실행 계획, 직접 나타나는 SQL 명령 에서토토 베이/pgsql함수가 있어야합니다 모든 실행에서 동일한 테이블과 열을 참조하십시오. 저것 매개 변수를 테이블 또는 열의 이름으로 사용할 수 없습니다. SQL 명령에서. 이 제한을 해결하려면 가능합니다 를 사용하여 동적 명령 구성PL/PGSQL execute성명서 - 새로운 실행 계획을 세우는 대가로 모든 실행에.
참고 :the토토 베이/pgsql execute진술은와 관련이 없습니다.와이즈 토토 : 문서 : 8.1 : executeSQL 에 의해 뒷받침되는 진술PostgreSQL서버. 서버의execute명령문을 사용할 수 없습니다 이내에토토 베이/pgsql함수 (그리고 필요하지 않습니다).
SQLIS THE LANGUAGEPostgreSQL및 대부분 관계형 데이터베이스는 쿼리 언어로 사용합니다. 휴대용입니다 배우기 쉽습니다. 하지만 모든SQL명령문을 실행해야합니다 데이터베이스 서버에 의해 개별적으로.
이는 고객 신청서가 각각을 보내야 함을 의미합니다 데이터베이스 서버에 대한 쿼리, 처리 될 때까지 기다리십시오. 결과를 수신하고 처리하고 계산을 수행하십시오 서버에 추가 쿼리를 보냅니다. 이 모든 것이 발생합니다 의사 소통 및 네트워크도 발생합니다 고객이 다른 기계에있는 경우 오버 헤드 데이터베이스 서버.
with토토 베이/pgsql할 수 있습니다 그룹 A 계산 블록 및 일련의 쿼리내부데이터베이스 따라서 절차 언어의 힘을 갖는 서버와 SQL 사용의 용이성이지만 상당한 비용 절감 효과가 있습니다. 전체 클라이언트/서버 통신이 없습니다 간접비.
고객 간의 추가 라운드 여행 제거 및 서버
클라이언트가 필요하지 않은 중간 결과 서버간에 마샬링되거나 전송 될 필요가 없습니다 그리고 클라이언트
추가 쿼리 라운드가 필요하지 않습니다 구문 분석
이것은 상당한 성능 증가를 허용 할 수 있습니다 저장되지 않은 응용 프로그램과 비교하여 기능.
또한토토 베이/pgsql당신 모든 데이터 유형, 운영자 및 기능을 사용할 수 있습니다. SQL.
PL/PGSQL인수로 받아 들일 수 있습니다 서버에서 지원하는 스칼라 또는 배열 데이터 유형 이러한 유형의 결과를 반환 할 수 있습니다. 그들은 또한 할 수 있습니다 지정된 복합 유형 (행 유형)을 수락하거나 반환합니다. 이름. 선언하는 것도 가능합니다토토 베이/pgsql반환으로 기능레코드열이 사양에 따라 결정되는 행 유형 호출 쿼리,섹션 7.2.1.4.
PL/PGSQL함수는 할 수 있습니다 또한 다형성 유형을 받아들이고 반환하도록 선언 됨Anylement및AnyArray. a 다형성 기능은 통화마다 다를 수 있습니다. 안에섹션 32.2.5. 예제가에 표시됩니다.섹션 36.4.1.
PL/PGSQL함수는 할 수 있습니다 또한 반품으로 선언 됨"set"또는 테이블은 가능한 모든 데이터 유형입니다 단일 인스턴스를 반환하십시오. 이러한 기능은 그 기능을 생성합니다 실행하여 출력반환 다음결과 세트의 원하는 각 요소.
마지막으로, a토토 베이/pgsql함수는 반환으로 선언 될 수 있습니다void유용한 반환 값이없는 경우
참고 : 토토 베이/pgsql현재 도메인 유형을 완전히 지원하지 않습니다 : It 도메인을 기본 스칼라 유형과 동일하게 처리합니다. 이것은 도메인과 관련된 제약 조건을 의미합니다 시행되지 않습니다. 이것은 기능의 문제가 아닙니다 논쟁, 그러나 당신이 a를 선언하면 위험입니다.토토 베이/pgsql도메인 유형 반환.
토토 베이/pgsql함수는 할 수 있습니다 또한 출력 매개 변수로 선언됩니다. 리턴 유형의 명시 적 사양. 이것은 추가되지 않습니다 언어에 대한 모든 기본 기능이지만 종종 특히 여러 값을 반환하는 데 편리합니다.