DO — 임의 코드 블럭을 실행
DO [ LANGUAGE언어이름
]코드
DO
명령은 임의 코드 블럭을 실행하는 명령이며, 여기서
사용하는 코드란 내장 프로시져 언어로 구성된 함수들을 사용하는
프로그램을 코드다.
여기서는 사용자 정의 함수를 만드는 방법과 비슷하지만, 입력 매개 변수도, 출력 자료형도 없는 형태이다. 여기서 쓰이는 코드는 한 번만 쓰인다.
선택적으로 코드 블럭에 쓰이는 코드들이 어떤 프로시져 언어인지를 지정하는
LANGUAGE
옵션을 사용할 수 있다.
코드
실행할 절차 언어 코드들. 이 값은 문자열이다. CREATE FUNCTION
명령에서 코드를 정의할 때와 같이 달러 두 개를 사용하는 인용 기법을
사용할 수 있다. 코드 내 인용 부호 처리를 쉽게 하기 위해서,
이 인용 부호 사용을 권장한다.
언어이름
코드 블럭에서 사용하는 코드가 어떤 프로시져 언어로 해석할지를
지정한다. 기본값은 plpgsql
이다.
여기서 사용하는 프로시져 언어는 먼저 CREATE EXTENSION
명령을 이용해서 현재 사용하는 데이터베이스에 등록되어 있어야 한다.
plpgsql
언어는 기본 설치되어 있다. 그 외 언어는
사용자가 직접 설치 해야 한다.
이 명령을 실행하려면 먼저 그 언어에 대한 USAGE
권한이 이 명령을 사용하는 사용자에게 부여되어야한다. 또한
신뢰할 수 없는 언어에 대해서는 슈퍼유저만 사용할 수 있다.
간단히 말하면, 이 명령의 실행 권한은 함수 만드는 권한과 같다.
DO
명령이 트랜잭션 블럭 안에서 실행된다면,
그 작업은 트랜잭션 관리 대상에서 빠진다. DO
명령 안에서 실행되는 작업들은 그 범위 안에서 독립된 트랜잭션으로
처리된다.
public
스키마 내에 있는 모든 뷰에 대해서
webuser
롤에게 모든 권한을 부여야하는 예제:
DO $$DECLARE r record; BEGIN FOR r IN SELECT table_schema, table_name FROM information_schema.tables WHERE table_type = 'VIEW' AND table_schema = 'public' LOOP EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser'; END LOOP; END$$;
DO
명령은 SQL 표준이 아니다.