이 문서는 지원되지 않는 Postgre토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.무지개 토토 : 문서 : 17 : 41 장. PL/PGSQL - SQL 절차 언어버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

37장.PL/pg토토 - 토토절차적 언어

PL/pg토토로드 가능합니다 의 절차적 언어Postgre토토데이터베이스 시스템. 디자인 목표 의PL/pg토토다음을 생성하려고 했습니다. 로드 가능한 절차적 언어

  • 함수를 생성하고 트리거하는 데 사용할 수 있습니다. 절차,

  • 제어 구조를 다음에 추가합니다토토언어,

  • 복잡한 계산을 수행할 수 있습니다.

  • 모든 사용자 정의 유형, 함수 및 연산자,

  • 서버에서 신뢰하도록 정의할 수 있습니다.

  • 사용하기 쉽습니다.

37.1. 개요

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토토. 예를 들어, 다음이 가능합니다. 복잡한 조건부 계산 함수를 생성하고 나중에 사용 연산자를 정의하거나 색인 표현식에 사용합니다.

37.1.1. 사용의 장점PL/pg토토

토토언어입니다포스트그레토토(그리고 대부분의 기타 관계형 데이터베이스)를 쿼리 언어로 사용합니다. 휴대용입니다 그리고 배우기 쉽습니다. 하지만 매토토문이 실행되어야 합니다 데이터베이스 서버에 의해 개별적으로.

즉, 귀하의 클라이언트 응용프로그램은 각 항목을 전송해야 함을 의미합니다. 데이터베이스 서버에 쿼리하고, 처리될 때까지 기다립니다. 결과를 받고 일부 계산을 수행한 다음 다른 항목을 보냅니다. 서버에 쿼리합니다. 이 모든 것은 프로세스 간을 발생시킵니다. 통신을 수행하고 다음과 같은 경우 네트워크 오버헤드가 발생할 수도 있습니다. 클라이언트가 데이터베이스와 다른 시스템에 있습니다. 서버.

함께PL/pg토토당신은 할 수 있어요 계산 블록과 일련의 쿼리를 그룹화합니다.내부데이터베이스 서버, 따라서 절차적 언어의 힘을 갖고 토토을 사용하기 쉬우면서도 많은 시간을 절약할 수 있습니다. 전체 클라이언트/서버 통신 오버헤드가 없습니다. 이렇게 하면 성능이 크게 향상될 수 있습니다.

또한,PL/pg토토당신 모든 데이터 유형, 연산자 및 기능을 사용할 수 있습니다. 토토.

37.1.2. 지원되는 인수 및 결과 데이터 유형

다음에 작성된 기능PL/pg토토인수로 무엇이든 받아들일 수 있습니다. 서버가 지원하는 스칼라 또는 배열 데이터 유형 이러한 유형 중 하나의 결과를 반환할 수 있습니다. 그들은 또한 할 수 있습니다 다음에 의해 지정된 복합 유형(행 유형)을 수락하거나 반환합니다. 이름. 다음을 선언하는 것도 가능합니다.PL/pg토토반환 기능기록, 이는 결과가 다음과 같다는 것을 의미합니다. 열이 사양에 따라 결정되는 행 유형 호출 쿼리(에서 설명한 대로)섹션 7.2.1.4.

PL/pg토토함수는 다음과 같습니다 또한 다형성 유형을 허용하고 반환하도록 선언됩니다.모든 요소그리고임의배열. 에서 처리하는 실제 데이터 유형 다형성 함수는 설명한 대로 호출마다 다를 수 있습니다. 에서섹션 33.2.5. 예는 다음과 같습니다.섹션 37.4.1.

PL/pg토토함수는 또한 a를 반환하도록 선언됩니다."설정"또는 모든 데이터 유형의 테이블 단일 인스턴스를 반환합니다. 이러한 함수는 다음을 생성합니다. 실행하여 출력다음으로 돌아가기용 결과 집합의 원하는 각 요소입니다.

마지막으로, aPL/pg토토함수는 반환하도록 선언될 수 있습니다.공허유용한 반환 값이 없는 경우.