[PostgreSQL] PL/pgSQL 소개 및 사용자 정의 함수

Yuri Lee·2021년 5월 12일
0

PostgreSQL란?

  • PostgreSQL는 프로그래밍 언어를 이용해 함수를 직접 만들어 실행하기 위해 PL/pgSQL이라는 언어를 제공한다.
  • 이 PL/pgSQL를 활용한다는 것은 Stored Procedure를 사용한다는 것이고, 이를 이용해 Trigger를 사용할 수 있는 발판이 된다.
  • PL/pgSQL은 PostgreSQL을 보다 편리하고 빠른 응답성을 제공받기 위해 사용할 수 있을 뿐만 아니라 데이터베이스 자체의 기능을 확장할 수 있는 기반을 제공한다.

PL/pgSQ란?

  • PL/pgSQL은 기본적인 SQL만으로 프로시저를 만들지 않고 PL/pgSQL같은 절차지향식 언어를 지원한다. (Oracle에서는 PL/SQL, SQL Server에서는 TSQL, Postgresql에서는 PL/pgSQL 로 부른다.

Stored Procedure란?

  • Stored Procedure(저장 프로시저)란 SQL로 만든 함수이다. 이 함수에 여러 SQL문을 작성해 사용한다.

사용 이유

  • 단위 하나로 작업을 만들어 저장할 수 있기 때문이다.

Stored Procedure 의 장점

  • 여러개의 SELECT나 UPDATE, INSERT 등과 같은 Query 문을 Stored Procedure 문을 통해 하나로 묶어 실행함으로써 서버와 클라이언트 간의 Round Trip의 개수를 줄인다.
    • Round Trip 이란? 라운트 트립(Round-trip)은 클라이언트와 서버간의 데이터 왕복 과정을 의미한다.
  • Round Trip을 줄이면 불필요한 네트워크 통신 횟수를 줄여 더 빠르게 DBMS 연산 결과를 얻을 수 있다.
  • SELECT나 UPDATE, INSERT, DELETE 문 등을 Java의 JDBC 등을 이용해 실행하게 되면, Query 문을 해석하고 실행하기에 앞서 많은 준비가 필요하다. 하지만 Stored Procedure는 이미 컴파일되어 DBMS 단에서 바로 실행할 수 있도록 준비되어 있어 그 실행 속도가 매우 빠르며, 함수 호출 시 인자만을 변경하여 빠르고 쉽게 재활용이 가능하다.
  • 특정 유저에게 UPDATE/DELETE를 막고, 함수만 사용할 수 있게 함으로써 기존 데이터 회손을 최대한 막을 수 있다. 보완이 뛰어나다.

Stored Procedure 의 단점

  • Stored Procedure를 C나 PL/pgSQL과 같은 프로그래밍 언어로 개발해야 하므로 특별환 스킬을 요구하고, 문제 발생시 디버깅이 어렵다.

  • Stored Procedure는 표준인 SQL과는 다르게 DBMS 마다 다르므로 DBMS가 변경되면 해당 DBMS에 맞게 Stored Procedure를 다시 개발해야 한다.

사용자 정의 함수

  • PL/pgSQL을 이용해 간단한 Stored Procedure를 만들어 보자. 사용자 정의 함수를 만들기 위해서는 CREATE FUNCTION 문을 사용한다.

사용자 정의 함수 문법

CREATE FUNCTION function_name(param1 type, param2 type)
 RETURNS return_type AS
BEGIN
 -- code
END;
LANGUAGE language_name;
  • function_name : 함수 이름
  • param1 type, param2 type : 함수 인자
  • return_type : 함수의 반환값의 타입
  • BEGIN과 END : code에 이 함수가 실행할 코드를 입력함.
  • language_name : 이 함수에 대한 프로그래밍 언어가 무엇인지, 우리는 PL/pgSQL 언어를 사용하므로 항상 plpgsql으로 설정
CREATE FUNCTION add(a INTEGER, b INTEGER)
RETURNS INTEGER AS
$$ BEGIN
    RETURN a+b;
END; $$
LANGUAGE PLPGSQL;

http://www.gisdeveloper.co.kr/?p=4546
https://m.blog.naver.com/PostView.nhn?blogId=myongsg&logNo=20176300457&proxyReferer=https:%2F%2Fwww.google.com%2F
https://brownbears.tistory.com/222

profile
Step by step goes a long way ✨

0개의 댓글