PL/pgSQL은 로드 가능한 절차 언어입니다.포스트그레스데이터베이스 시스템.
이 패키지는 원래 Jan Wieck에 의해 작성되었습니다. 이 문서의 일부는 Roberto Mello가 작성했습니다(<rmello@fslc.usu.edu).
PL/pgSQL의 설계 목표는 로드 가능한 SQL을 생성하는 것이었습니다. 절차적 언어
함수를 생성하고 트리거하는 데 사용할 수 있습니다. 절차,
제어 구조를 다음에 추가합니다SQL언어,
복잡한 계산을 수행할 수 있습니다.
모든 사용자 정의 유형, 함수 및 연산자,
서버에서 신뢰하도록 정의할 수 있습니다.
사용하기 쉽습니다.
PL/pgSQL 호출 핸들러는 함수의 소스 텍스트를 구문 분석합니다. 처음으로 내부 이진 명령 트리를 생성합니다. 함수가 호출됩니다. 생성된 바이트코드는 다음에서 식별됩니다. 함수의 객체 ID로 호출 핸들러. 이는 다음을 보장합니다. DROP/CREATE 시퀀스로 함수를 변경하는 데에는 시간이 걸립니다. 새로운 데이터베이스 연결을 설정하지 않고도 효과가 있습니다.
모든 표현식 및SQL함수에 사용된 명령문, PL/pgSQL 바이트코드 인터프리터는 다음을 사용하여 준비된 실행 계획을 생성합니다.SPI관리자SPI_prepare()그리고SPI_saveplan()함수. 이것은 완료되었습니다 개별 명세서가 처음으로 처리되는 경우 PL/pgSQL 함수. 따라서 조건부 코드가 있는 함수는 다음과 같습니다. 실행 계획에 대한 많은 명령문이 포함되어 있습니다. 필요한 계획만 준비하고 저장합니다. 실제로 데이터베이스 연결 수명 동안 사용됩니다.
이것은 당신이 조심해야 한다는 것을 의미합니다 사용자 정의 함수. 예를 들면:
CREATE FUNCTION populate()는 정수를 '로 반환합니다.
선언
    -- 선언
시작
    my_function()을 수행합니다.
끝;
' 언어 '윈 토토pgsql';위 함수를 생성하면 OID를 참조하게 됩니다.
에 대한my_function()바이트코드에 있습니다. 나중에,
삭제하고 다시 생성하는 경우my_function(),
그럼채우기()찾을 수 없습니다my_function()더 이상. 그러면 당신은
다시 만들어야 합니다채우기().
    PL/pgSQL은 이런 방식으로 실행 계획을 저장하기 때문에 쿼리 PL/pgSQL 함수에 직접 나타나는 것은 다음을 참조해야 합니다. 모든 실행에서 동일한 테이블과 필드 즉, 당신은 할 수 없습니다 매개변수를 쿼리의 테이블이나 필드 이름으로 사용합니다. 받는 사람 이 제한 사항을 해결하면 동적 쿼리를 구성할 수 있습니다. PL/pgSQL EXECUTE 문을 사용하여 --- 실행될 때마다 새로운 쿼리 계획을 구성합니다.
입/출력 변환 및 계산 기능 제외 사용자 정의 유형의 경우 C로 정의할 수 있는 모든 것 언어 기능은 PL/pgSQL로도 수행할 수 있습니다. 그것은 복잡한 조건부 계산 함수 생성 가능 나중에 이를 사용하여 연산자를 정의하거나 다음에서 사용합니다. 기능 지수.
더 나은 성능(참조섹션 24.1.1.1)
SQL 지원(참조섹션 24.1.1.2)
이식성(참조섹션 24.1.1.3)
SQL언어입니다 PostgreSQL(및 대부분의 다른 관계형 데이터베이스)은 다음과 같이 사용합니다. 쿼리 언어. 휴대가 가능하고 배우기 쉽습니다. 하지만 매SQL문을 실행해야 합니다. 데이터베이스 서버에 의해 개별적으로.
즉, 클라이언트 응용 프로그램은 다음을 전송해야 함을 의미합니다. 데이터베이스 서버에 쿼리하고, 처리될 때까지 기다립니다. 결과를 받고 일부 계산을 수행한 다음 다른 항목을 보냅니다. 서버에 쿼리합니다. 이 모든 것은 프로세스 간 발생합니다. 통신을 수행하고 다음과 같은 경우 네트워크 오버헤드가 발생할 수도 있습니다. 클라이언트가 데이터베이스와 다른 시스템에 있습니다. 서버.
PL/pgSQL을 사용하면 계산 블록과 일련의 쿼리내부데이터베이스 서버, 따라서 절차적 능력을 가짐 언어와 SQL 사용의 용이성, 그러나 많은 비용 절감 전체 클라이언트/서버가 없기 때문에 시간이 걸립니다. 통신 오버헤드. 귀하의 응용 프로그램은 PL/pgSQL을 사용하면 성능이 상당히 향상됩니다.
PL/pgSQL은 절차적 언어의 강력한 기능을 유연성과 용이성SQL. PL/pgSQL을 사용하면 모든 데이터 유형, 열, SQL의 연산자 및 기능.
PL/pgSQL 함수는 PostgreSQL 내에서 실행되기 때문에 이러한 함수는 PostgreSQL이 실행되는 모든 플랫폼에서 실행됩니다. 따라서 코드를 재사용하고 개발 비용을 줄일 수 있습니다. 비용.
PL/pgSQL에서 개발하는 것은 매우 간단합니다. 특히 다른 데이터베이스 절차에서 개발한 경우 Oracle의 PL/SQL과 같은 언어. 두 가지 좋은 방법 PL/pgSQL에서 개발하는 것은 다음과 같습니다.
텍스트 편집기를 사용하여 파일 다시 로드psql
PostgreSQL의 GUI 도구 사용: pgaccess
PL/pgSQL에서 개발하는 좋은 방법 중 하나는 간단히 다음을 사용하는 것입니다. 원하는 텍스트 편집기를 사용하여 함수를 생성하고 다른 콘솔, 사용psql(PostgreSQL의 대화형 모니터)를 사용하여 해당 기능을 로드합니다. 이런 식으로 수행하는 경우(그리고 PL/pgSQL인 경우) 초보자 또는 디버깅 단계) 항상 다음을 수행하는 것이 좋습니다.드롭함수를 생성하기 전에. 그렇게 하면 파일을 다시 로드할 때 기능이 삭제됩니다. 그런 다음 다시 만드세요. 예를 들면:
함수 testfunc(정수) 삭제;
testfunc(integer) 함수를 생성하여 정수를 '로 반환합니다.
    ....
끝;
' 언어 '윈 토토pgsql';
      처음으로 파일을 로드할 때,포스트그레SQL다음과 같은 경고를 보낼 것입니다 이 함수는 존재하지 않으므로 계속해서 만드세요. 로드하려면 SQL 파일(filename.sql)을 "dbname"이라는 데이터베이스에 추가합니다. 다음 명령을 사용하십시오:
psql -f 파일명.sql DB명
PL/pgSQL에서 개발하는 또 다른 좋은 방법은 다음을 사용하는 것입니다.포스트그레SQL의 GUI 도구: pgaccess. 탈출과 같은 좋은 일을 합니다. 작은따옴표를 사용하여 쉽게 다시 만들고 디버깅할 수 있습니다. 기능.