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

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

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

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

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

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

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

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

  • 사용하기 쉽습니다.

입/출력 변환 및 계산 기능 제외 사용자 정의 유형의 경우 C로 정의할 수 있는 모든 것 언어 기능은 다음을 사용하여 수행할 수도 있습니다.PL/pg토토 캔. 예를 들어, 다음이 가능합니다. 복잡한 조건부 계산 함수를 생성하고 나중에 사용 연산자를 정의하거나 색인 표현식에 사용합니다.

35.1. 개요

PL/pg토토 캔호출 핸들러 함수의 소스 텍스트를 구문 분석하고 내부 텍스트를 생성합니다. 함수가 처음 호출될 때 이진 명령 트리 (각 세션 내에서). 명령어 트리는 완전히 번역됩니다.PL/pg토토 캔문장 구조이지만 개별적임토토 캔표현식 및토토 캔함수에 사용된 명령은 다음과 같습니다. 즉시 번역되었습니다.

각 표현과토토 캔명령이 함수에서 처음 사용되었습니다.PL/pg토토 캔통역사 준비된 실행 계획을 생성합니다(SPI관리자SPI_prepare그리고SPI_saveplan함수).해당 표현에 대한 후속 방문 또는 명령은 준비된 계획을 재사용합니다. 따라서 함수는 다음과 같은 많은 명령문을 포함하는 조건부 코드 실행 계획이 필요할 수 있습니다. 준비하고 저장만 하면 됩니다. 평생 동안 실제로 사용되는 계획 데이터베이스 연결. 이렇게 하면 총 비용을 크게 줄일 수 있습니다. 실행 계획을 구문 분석하고 생성하는 데 필요한 시간 a의 진술에 대해PL/pg토토 캔함수. 단점은 특정 표현식이나 명령의 오류가 감지되지 않을 수 있습니다. 함수의 해당 부분이 실행될 때까지.

한 번PL/pg토토 캔만들었습니다 함수의 특정 명령에 대한 실행 계획은 다음과 같습니다. 데이터베이스 연결 수명 동안 해당 계획을 재사용하십시오. 이 일반적으로 성능면에서 승리하지만 일부 문제가 발생할 수 있습니다. 데이터베이스 스키마를 동적으로 변경하면 문제가 발생합니다. 에 대한 예:

CREATE FUNCTION populate() 정수를 $$로 반환합니다.
선언
    -- 선언
시작
    my_function()을 수행합니다.
끝;
$$ 언어 plpgsql;

위 함수를 실행하면 OID를 참조하게 됩니다. 에 대한my_function()에 다음에 대해 작성된 실행 계획수행성명. 나중에 떨어뜨리면 재창조my_function()그러면채우기()할 수 없습니다 찾기my_function()더 이상. 당신 그런 다음 다시 만들어야 합니다채우기()또는 최소한 새 데이터베이스를 시작하세요. 세션이 새로 컴파일되도록 합니다. 또 다른 방법 이 문제를 피하는 것은 사용하는 것입니다.생성 또는 함수 교체정의를 업데이트할 때내_기능(함수인 경우"대체됨", OID가 아닙니다. 변경됨).

왜냐하면PL/pg토토 캔저장 이런 식으로 실행 계획을 세우면 토토 캔 명령어가 직접적으로 나타나 에서PL/pg토토 캔함수는 반드시 모든 실행에서 동일한 테이블과 열을 참조하십시오. 그 즉, 매개변수를 테이블이나 열의 이름으로 사용할 수 없습니다. 토토 캔 명령에서. 이 제한 사항을 해결하려면 다음을 수행하십시오. 를 사용하여 동적 명령을 구성합니다.PL/pg토토 캔 실행성명 — 새로운 실행 계획을 세우는 대가로 실행될 때마다.

참고:PL/pg토토 캔 실행문은 다음과 관련이 없습니다윈 토토 : 문서 : 8.0 : execute토토 캔 에서 지원하는 진술Postgre토토 캔서버. 서버의실행문은 사용할 수 없습니다 이내PL/pg토토 캔함수 (그리고 필요하지 않습니다).

35.1.1. 사용의 장점PL/pg토토 캔

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

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

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

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

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

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

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

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

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

PL/pg토토 캔하지 않습니다 현재 도메인 유형을 완벽하게 지원합니다. 도메인은 기본 스칼라 유형과 동일합니다. 이는 다음을 의미합니다. 도메인과 관련된 제약 조건은 시행. 이는 함수 인수의 문제는 아니지만 다음을 선언하면 위험합니다.PL/pg토토 캔도메인 반환 기능 유형.