[컴][DB] postgreSQL stored procedures

#postgres 프로시져 / #postgres procedure




PostgreSQL 의 procedural language


PostgreSQL 에서 procedural language(프로시져 언어) 는 2개의 종류로 나뉜다.

  • safe language : SQL, PL/pqSQL 
  • sand-boxed language(unsafe language) : 이것은 superuser 에 의해서만 사용가능하다. security 를 무시할 수 있고, 외부 sources 이 접근하는 것을 허락할 수 있다. 가능한 언어는 C 등이 있다.
기본적으로 PostgreSQL 이 
  • SQL
  • PL/pgSQL
를 제공한다. 나머지 언어는 extension 을 사용해서 사용할 수 있다.(Perl, python, TCL 등)



장점/단점

ref. 2 에서 이야기하는 장, 단점을 정리했다.

장점


  1. sql 을 여러번 날려야 하는 경우보다는 한번에 처리하는 것이 낫다. (네트워크의 속도나, db의 처리 가능량때문에)
  2. 속도가 빠르다. : user-defined function 은 DB server 에 미리 compiled 되고, 저장된다.
  3. 재사용 : 같은 query 를 굳이 계속 만들지 않고도 쉽게 다른 application 에서도 사용가능하다.

단점


  1. 개발이 느려질 수 있다. procedural language 를 모든 개발자가 작성법을 알고 있는 것은 아니니까.
  2. version 관리나 debug 를 어렵게 한다.
  3. 다른 DBMS 로 옮겨가기 어렵다.



User-defined function

아래가 user-defined function 의 기본 형태이다. 대략적으로 다른 언어와 크게 다르지 않다. 다만 마지막에 LANGUAGE 를 적어주는데, 이는 위에서 이야기했듯이 postgreSQL 이 여러 language 를 지원하기 때문이다.

CREATE FUNCTION function_name(p1 type, p2 type)
 RETURNS type AS
BEGIN
  -- 여기에 원하는 logic 을 적으면 된다.
END;
LANGUAGE plpgsql;


CREATE FUNCTION inc(IN i integer, IN val integer)
 RETURNS integer AS
$BODY$BEGIN
    RETURN i + val;
END;$BODY$
LANGUAGE plpgsql;


위의 code 를 pgAdmin 을 통해서 만들 수도 있다.






Reference

  1. PostgreSQL Stored Procedures
  2. Introduction to PostgreSQL Stored Procedures
  3. Developing User-defined Functions Using PostgreSQL CREATE FUNCTION


댓글 없음:

댓글 쓰기