PL/pg토토로드 가능합니다 의 절차적 언어Postgre토토데이터베이스 시스템. 디자인 목표 의PL/pg토토다음을 생성하려고 했습니다. 로드 가능한 절차적 언어
함수를 생성하고 트리거하는 데 사용할 수 있습니다. 절차,
제어 구조를 다음에 추가합니다토토언어,
복잡한 계산을 수행할 수 있습니다.
모든 사용자 정의 유형, 함수 및 연산자,
서버에서 신뢰하도록 정의할 수 있습니다.
사용하기 쉽습니다.
그PL/pg토토호출 핸들러 함수의 소스 텍스트를 구문 분석하고 내부 텍스트를 생성합니다. 함수가 처음 호출될 때 이진 명령 트리 (각 세션 내에서). 명령어 트리는 완전히 번역됩니다.PL/pg토토문장 구조이지만 개별적임토토표현 및토토함수에 사용된 명령은 다음과 같습니다. 즉시 번역되었습니다.
각 표현과토토명령이 함수에서 처음 사용되었습니다.PL/pg토토통역사
준비된 실행 계획을 생성합니다(SPI관리자SPI_prepare그리고SPI_saveplan함수).해당 표현에 대한 후속 방문 또는
명령은 준비된 계획을 재사용합니다. 따라서 함수는
다음과 같은 많은 명령문을 포함하는 조건부 코드
실행 계획이 필요할 수 있습니다. 준비하고 저장만 하면 됩니다.
평생 동안 실제로 사용되는 계획
데이터베이스 연결. 이렇게 하면 총 비용을 크게 줄일 수 있습니다.
실행 계획을 구문 분석하고 생성하는 데 필요한 시간
a의 진술에 대해PL/pg토토함수. 단점은
특정 표현식이나 명령의 오류가 감지되지 않을 수 있습니다.
함수의 해당 부분이 실행될 때까지.
한 번PL/pg토토이(가) 만들었습니다 함수의 특정 명령에 대한 실행 계획은 다음과 같습니다. 데이터베이스 연결 수명 동안 해당 계획을 재사용하십시오. 이 일반적으로 성능면에서 승리하지만 일부 문제가 발생할 수 있습니다. 데이터베이스 스키마를 동적으로 변경하면 문제가 발생합니다. 에 대한 예:
CREATE FUNCTION populate() 정수 AS '를 반환합니다.
선언
-- 선언
시작
my_function()을 수행합니다.
끝;
' 언어 plpgsql;
위 함수를 실행하면 OID를 참조하게 됩니다.
에 대한my_function()에
다음에 대해 작성된 실행 계획수행성명. 나중에 떨어뜨리면
재창조my_function()그러면채우기()할 수 없습니다
찾기my_function()더 이상. 당신
그런 다음 다시 만들어야 합니다채우기()또는 최소한 새 데이터베이스를 시작하세요.
세션이 새로 컴파일되도록 합니다. 또 다른 방법
이 문제를 피하는 것은 사용하는 것입니다.생성 또는
함수 교체정의를 업데이트할 때내_기능(함수인 경우"대체됨", OID가 아닙니다.
변경됨).
왜냐하면PL/pg토토저장 이런 식으로 실행 계획을 세우면 토토 명령어가 직접적으로 나타나 에서PL/pg토토함수는 반드시 모든 실행에서 동일한 테이블과 열을 참조하십시오. 그 즉, 매개변수를 테이블이나 열의 이름으로 사용할 수 없습니다. 토토 명령에서. 이 제한 사항을 해결하려면 다음을 수행하십시오. 를 사용하여 동적 명령을 구성합니다.PL/pg토토 실행성명 --- 새로운 실행 계획을 세우는 대가로 실행될 때마다.
참고:그PL/pg토토 실행문은 다음과 관련이 없습니다실행에 의해 지원되는 성명Postgre토토서버. 는 서버의실행문은 할 수 없습니다 이내에 사용되어야 합니다.PL/pg토토함수(필요하지 않음).
입/출력 변환 및 계산 기능 제외 사용자 정의 유형의 경우 C로 정의할 수 있는 모든 것 언어 기능은 다음을 사용하여 수행할 수도 있습니다.PL/pg토토. 예를 들어, 다음이 가능합니다. 복잡한 조건부 계산 함수를 생성하고 나중에 사용 연산자를 정의하거나 색인 표현식에 사용합니다.
토토언어입니다포스트그레토토(그리고 대부분의 기타 관계형 데이터베이스)를 쿼리 언어로 사용합니다. 휴대용입니다 그리고 배우기 쉽습니다. 하지만 매토토문이 실행되어야 합니다 데이터베이스 서버에 의해 개별적으로.
즉, 귀하의 클라이언트 응용프로그램은 각 항목을 전송해야 함을 의미합니다. 데이터베이스 서버에 쿼리하고, 처리될 때까지 기다립니다. 결과를 받고 일부 계산을 수행한 다음 다른 항목을 보냅니다. 서버에 쿼리합니다. 이 모든 것은 프로세스 간을 발생시킵니다. 통신을 수행하고 다음과 같은 경우 네트워크 오버헤드가 발생할 수도 있습니다. 클라이언트가 데이터베이스와 다른 시스템에 있습니다. 서버.
함께PL/pg토토당신은 할 수 있어요 계산 블록과 일련의 쿼리를 그룹화합니다.내부데이터베이스 서버, 따라서 절차적 언어의 힘을 갖고 토토을 사용하기 쉬우면서도 많은 시간을 절약할 수 있습니다. 전체 클라이언트/서버 통신 오버헤드가 없습니다. 이렇게 하면 성능이 크게 향상될 수 있습니다.
또한,PL/pg토토당신 모든 데이터 유형, 연산자 및 기능을 사용할 수 있습니다. 토토.
다음에 작성된 기능PL/pg토토인수로 무엇이든 받아들일 수 있습니다. 서버가 지원하는 스칼라 또는 배열 데이터 유형 이러한 유형 중 하나의 결과를 반환할 수 있습니다. 그들은 또한 할 수 있습니다 다음에 의해 지정된 복합 유형(행 유형)을 수락하거나 반환합니다. 이름. 다음을 선언하는 것도 가능합니다.PL/pg토토반환 기능기록, 이는 결과가 다음과 같다는 것을 의미합니다. 열이 사양에 따라 결정되는 행 유형 호출 쿼리(에서 설명한 대로)섹션 7.2.1.4.
PL/pg토토함수는 다음과 같습니다 또한 다형성 유형을 허용하고 반환하도록 선언됩니다.모든 요소그리고임의배열. 에서 처리하는 실제 데이터 유형 다형성 함수는 설명한 대로 호출마다 다를 수 있습니다. 에서섹션 33.2.5. 예는 다음과 같습니다.섹션 37.4.1.
PL/pg토토함수는 또한 a를 반환하도록 선언됩니다."설정"또는 모든 데이터 유형의 테이블 단일 인스턴스를 반환합니다. 이러한 함수는 다음을 생성합니다. 실행하여 출력다음으로 돌아가기용 결과 집합의 원하는 각 요소입니다.
마지막으로, aPL/pg토토함수는 반환하도록 선언될 수 있습니다.공허유용한 반환 값이 없는 경우.