PL/pg롤 토토로드 가능합니다 의 절차적 언어Postgre롤 토토데이터베이스 시스템.
이 패키지는 원래 Jan Wieck에 의해 작성되었습니다. 이
  문서의 일부는 Roberto Mello가 작성했습니다(<rmello@fslc.usu.edu).
설계 목표PL/pg롤 토토로더블을 생성하려고 했습니다. 절차적 언어
함수를 생성하고 트리거하는 데 사용할 수 있습니다. 절차,
제어 구조를 다음에 추가합니다롤 토토언어,
복잡한 계산을 수행할 수 있습니다.
모든 사용자 정의 유형, 함수 및 연산자,
서버에서 신뢰하도록 정의할 수 있습니다.
사용하기 쉽습니다.
그PL/pg롤 토토호출 핸들러 함수의 소스 텍스트를 구문 분석하고 내부 텍스트를 생성합니다. 함수가 처음 호출될 때 이진 명령 트리 (하나의 백엔드 프로세스 내에서). 명령어 트리가 완전히 다음을 번역합니다.PL/pg롤 토토문 구조, 그러나 개별롤 토토표현식 및롤 토토함수에 사용된 쿼리는 즉시 번역되었습니다.
각 표현과롤 토토쿼리가 함수에서 처음 사용되었습니다.PL/pg롤 토토통역사
    준비된 실행 계획을 생성합니다(SPI관리자SPI_prepare그리고SPI_saveplan함수). 이후 방문
    해당 표현식이나 쿼리는 준비된 계획을 재사용합니다. 따라서,
    많은 문을 포함하는 조건부 코드가 있는 함수
    실행 계획이 필요할 수 있는 경우에만 준비합니다.
    평생 동안 실제로 사용되는 계획을 저장하십시오.
    데이터베이스 연결의. 이는 상당한 이점을 제공할 수 있습니다.
    구문 분석 활동이 절약됩니다. 단점은 오류가 발생한다는 것입니다.
    특정 표현이나 쿼리는 그 때까지 감지되지 않을 수 있습니다.
    함수의 일부가 실행 중에 도달합니다.
한 번PL/pg롤 토토다음을 만들었습니다 함수의 특정 쿼리에 대한 쿼리 계획은 재사용됩니다. 데이터베이스 연결 수명에 대한 계획입니다. 이것은 일반적으로 성능면에서 승리하지만 일부 문제가 발생할 수 있습니다. 데이터베이스 스키마를 동적으로 변경하는 경우. 예를 들면:
CREATE FUNCTION populate()는 정수를 '로 반환합니다.
선언
    -- 선언
시작
    my_function()을 수행합니다.
끝;
' 언어 'plpgsql';
    위 함수를 실행하면 OID를 참조하게 됩니다.
    에 대한my_function()쿼리에서
    PERFORM 문에 대해 생성된 계획입니다. 나중에 떨어뜨리면
    다시 생성my_function()그러면채우기()할 수 없습니다
    찾기my_function()더 이상. 당신
    그런 다음 다시 만들어야 합니다.채우기()또는 최소한 새 데이터베이스를 시작하세요.
    세션이 새로 컴파일되도록 합니다.
왜냐하면PL/pg롤 토토저장 이러한 방식으로 실행 계획을 실행하면 쿼리는PL/pg롤 토토함수는 참조해야 함 모든 실행 시 동일한 테이블과 필드에 적용됩니다. 즉, 당신 매개변수를 테이블이나 필드의 이름으로 사용할 수 없습니다. 쿼리. 이 제한 사항을 해결하려면 다음을 생성할 수 있습니다. 를 사용한 동적 쿼리PL/pg롤 토토EXECUTE 문 ---에서 실행할 때마다 새로운 쿼리 계획을 구성하는 데 드는 비용입니다.
입/출력 변환 및 계산 기능 제외 사용자 정의 유형의 경우 C로 정의할 수 있는 모든 것 언어 기능은 다음을 사용하여 수행할 수도 있습니다.PL/pg롤 토토. 콤플렉스 생성이 가능합니다 조건부 계산 함수를 사용하고 나중에 이를 사용하여 정의합니다. 연산자를 사용하거나 기능 인덱스에 사용하세요.
더 나은 성능(참조섹션 23.1.1.1)
롤 토토 지원(참조섹션 23.1.1.2)
이식성(참조섹션 23.1.1.3)
롤 토토언어입니다포스트그레롤 토토(그리고 대부분의 기타 관계형 데이터베이스)를 쿼리 언어로 사용합니다. 휴대용입니다 그리고 배우기 쉽습니다. 하지만 매롤 토토문이 실행되어야 합니다 데이터베이스 서버에 의해 개별적으로.
즉, 귀하의 클라이언트 응용 프로그램은 다음을 전송해야 함을 의미합니다. 데이터베이스 서버에 쿼리하고, 처리될 때까지 기다립니다. 결과를 받고 일부 계산을 수행한 다음 다른 항목을 보냅니다. 서버에 쿼리합니다. 이 모든 것은 프로세스 간을 발생시킵니다. 통신을 수행하고 다음과 같은 경우 네트워크 오버헤드가 발생할 수도 있습니다. 클라이언트가 데이터베이스와 다른 시스템에 있습니다. 서버.
함께PL/pg롤 토토당신은 할 수 있어요 계산 블록과 일련의 쿼리를 그룹화합니다.내부데이터베이스 서버, 따라서 절차적 능력을 가짐 언어와 롤 토토 사용의 용이성, 그러나 많은 비용 절감 전체 클라이언트/서버가 없기 때문에 시간이 걸립니다. 통신 오버헤드. 이는 상당한 효과를 가져올 수 있습니다. 성능이 향상됩니다.
PL/pg롤 토토힘을 더합니다 유연성과 용이성을 갖춘 절차적 언어롤 토토. 와 함께PL/pg롤 토토당신은 모든 데이터를 사용할 수 있습니다 롤 토토의 유형, 열, 연산자 및 함수.
왜냐하면PL/pg롤 토토함수는 내부에서 실행됩니다.Postgre롤 토토, 이 함수가 실행됩니다 모든 플랫폼에서Postgre롤 토토실행됩니다. 따라서 재사용할 수 있습니다. 코드를 작성하고 개발 비용이 적습니다.
개발 중PL/pg롤 토토이다 매우 간단합니다. 특히 당신이 개발한 경우라면 더욱 그렇습니다. Oracle과 같은 다른 데이터베이스 절차 언어PL/롤 토토. 두 가지 좋은 방법 개발 중PL/pg롤 토토다음은:
텍스트 편집기를 사용하여 파일 다시 로드p롤 토토
사용 중Postgre롤 토토의 GUI 도구:PgAccess
개발할 수 있는 좋은 방법 중 하나PL/pg롤 토토단순히 텍스트를 사용하는 것입니다 원하는 편집기를 사용하여 함수를 생성하고 다른 콘솔, 사용p롤 토토(Postgre롤 토토의 대화형 모니터)를 사용하여 해당 기능을 로드합니다. 이런 식으로 하면 이렇게 쓰는 것이 좋습니다. 함수를 사용하여생성 또는 교체 기능. 이렇게 하면 파일을 다시 로드하여 업데이트할 수 있습니다. 기능 정의. 예를 들면:
함수 생성 또는 교체 testfunc(INTEGER)는 정수를 '로 반환합니다.
    ....
끝;
' 언어 'plpg롤 토토';
      실행 중p롤 토토, 로드하거나 다음을 사용하여 함수 정의 파일을 다시 로드합니다.
\i 파일명.롤 토토
그런 다음 즉시 롤 토토 명령을 실행하여 테스트합니다. 기능.
개발하는 또 다른 좋은 방법PL/pg롤 토토사용 중Postgre롤 토토의 GUI 도구:PgAccess. 그것은 좋은 일을합니다 당신은 작은 따옴표를 피하고 쉽게 함수를 다시 만들고 디버깅합니다.