PL/pgSQL
1. 개요
PL/pgSQL은 PostgreSQL의 표준 절차적 언어이다. SQL/PSM과 유사하지만, 오라클의 PL/SQL에서 영향을 받아 예외 처리 방식, 경고 처리, 변수 선언 방식 등에서 차이점을 보인다. PL/pgSQL은 SQL 및 PL/pgSQL 스크립트의 문서화를 지원하며, 다양한 문서 생성 도구를 사용할 수 있다. PostgreSQL은 PL/pgSQL 외에도 PL/PSM, PL/Java, PL/Perl, plPHP, PL/Python, PL/R, PL/Ruby, PL/sh, PL/Tcl 등 다양한 절차적 언어를 지원한다.
| 이름 | PL/pgSQL |
|---|---|
| 종류 | 프로그래밍 언어 |
| 디자이너 | 얀 비크 |
|---|---|
| 개발자 | PostgreSQL 글로벌 개발 그룹 |
| 최초 출시일 | 1998년 10월 30일 |
| 웹사이트 | PL/pgSQL 공식 문서 |
|---|---|
| 영향을 받은 언어 | PL/SQL, 에이다 |
-
PostgreSQL -
아마존 레드시프트
-
PostgreSQL -
DBeaver
DBeaver는 2010년 이반 포포프가 개발한 오픈 소스 데이터베이스 관리 도구로, 다양한 데이터베이스 시스템 지원, 사용자 친화적 인터페이스, 여러 버전 제공, 다양한 운영체제 및 언어 지원, SQL 쿼리 실행 및 편집, 데이터 브라우징 및 편집, 데이터베이스 구조 탐색 및 편집 등 다양한 기능을 제공한다. -
데이터 중심 프로그래밍 언어 -
마이크로소프트 액세스
마이크로소프트 액세스는 1992년 출시된 데이터베이스 관리 시스템으로, 테이블, 쿼리, 폼 등을 생성하고 VBA를 통해 솔루션을 개발하며, 윈도우에서 사용 가능하고 다양한 데이터 형식과 통합된다. -
데이터 중심 프로그래밍 언어 -
SQL
SQL은 관계형 데이터베이스 관리 시스템에서 데이터를 관리하고 조작하기 위해 설계된 표준 프로그래밍 언어로서, 데이터 정의어, 데이터 조작어, 데이터 제어어를 포함하는 다양한 명령어 문법을 제공하며 ANSI와 ISO에 의해 표준으로 채택되었다. -
SQL -
사용자 정의 함수
사용자 정의 함수는 프로그래밍 언어와 데이터베이스 시스템에서 사용자가 직접 정의하여 재사용할 수 있는 코드 블록이다. -
SQL -
임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
2. PL/pgSQL의 특징
PL/pgSQL은 PostgreSQL을 위해 설계된 절차적 프로그래밍 언어로서, SQL의 선언적 특성과 절차적 프로그래밍의 제어 구조를 결합한 것이 특징이다.
2.1. SQL/PSM과의 비교
SQL/PSM는 ISO 표준에 의해 규정되며, 오라클의 PL/SQL 및 PL/pgSQL로부터 영감을 받아 몇 가지 차이점이 있다. PL/pgPSM 기여 모듈은 표준을 구현한다. PL/pgSQL과 다른 PSM의 주요 특징은 다음과 같다.
* 예외 처리기는 서브루틴(계속 처리기)이다.
* 경고는 예외처럼 처리될 수 있다.
* 변수 선언은 SQL 쿼리 결과에 기반해야 한다.
오라클 PL/SQL, PostgreSQL PL/pgSQL 및 ISO SQL/PSM 세 언어는 원래 Ada 프로그래밍 언어에서 파생되었다.
2.2. 예제
CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$
BEGIN
RETURN subtotal * 0.06;
END;
$$ LANGUAGE plpgsql;
```
주어진 코드는 PL/pgSQL로 작성된 `sales_tax`라는 함수를 정의한다. 이 함수는 `subtotal`이라는 실수(real) 값을 입력받아, 입력값의 6%를 계산하여 반환한다.
3. PostgreSQL의 다른 절차적 언어
PL/pgSQL은 PostgreSQL의 표준 절차적 언어이지만, 이 외에도 PL/PSM, PL/Java, PL/Perl, plPHP, PL/Python, PL/R, PL/Ruby, PL/sh, PL/Tcl 등 다양한 절차적 언어를 사용할 수 있다.
3.1. 지원되는 언어 목록
| 언어 | 설명 | 외부 링크 |
|---|---|---|
| PL/PSM | SQL/PSM 준수 | [http://pgfoundry.org/projects/plpsm/ PL/PSM] |
| PL/Java | Java | [http://gborg.postgresql.org/project/pljava/projdisplay.php PL/Java] |
| PL/Perl | Perl | [http://www.postgresql.org/docs/current/interactive/plperl.html PL/Perl] |
| plPHP | PHP | [http://www.commandprompt.com/community/plphp/ plPHP] |
| PL/Python | Python | [http://www.postgresql.org/docs/current/interactive/plpython.html PL/Python] |
| PL/R | R 언어 | [http://www.joeconway.com/plr/ PL/R] |
| PL/Ruby | Ruby | [http://raa.ruby-lang.org/project/pl-ruby PL/Ruby] |
| PL/sh | sh | [http://plsh.projects.postgresql.org/ PL/sh] |
| PL/Tcl | Tcl | [http://www.postgresql.org/docs/current/interactive/pltcl.html PL/Tcl] |
4. 문서화 지원
PL/pgSQL은 스크립트 문서화를 위한 공식적인 의사 언어를 포함하고 있다. 문서 생성기를 이용해 이러한 문서로부터 하이퍼텍스트 형태의 문서를 생성할 수 있다. PL/SQL이 이러한 도구 중 일부를 지원하므로, PL/pgSQL도 전체 또는 부분적으로 지원할 것으로 예상된다.
4.1. 문서 생성 도구
SQL 및 PL/pgSQL 스크립트에는 문서화를 위한 공식적인 의사 언어를 포함할 수 있다. 이 문서는 데이터를 추출하고 하이퍼텍스트를 생성하는 외부 도구인 문서 생성기에 의해 처리된다. PL/SQL이 이러한 도구 중 일부를 지원하므로 PL/pgSQL도 전체 또는 부분적으로 지원할 것으로 예상된다.
| 도구 | 전체 PL/pgSQL | Javadoc 스타일 | 기타 스타일 | 사용하는 PL/pgSQL 프로젝트 |
|---|---|---|---|---|
| Document! X | ||||
| Natural Docs | ||||
| ROBODoc |
기타 문서 도구: Doxygen, DBScribe, HyperSQL, Universal Report.