먼저 다음과 같은 테이블이 있습니다.
-- DIRECTORY CREATE TABLE directory ( id INTEGER, -- 디렉토리 ID parent_id INTEGER, -- 부모 디렉토리 (null 값일 때 루트) user_id INTEGER NOT NULL, -- 사용자 ID PRIMARY KEY (id, user_id), CONSTRAINT fk_parent_i FOREIGN KEY(user_id, parent_id) REFERENCES directory(user_id, id) ON DELETE CASCADE );
그리고 이 테이블에 데이터를 추가하는 함수는 다음과 같습니다.
-- 신규 데이터 추가 함수 CREATE OR REPLACE FUNCTION add(_parent_id INTEGER, _user_id INTEGER) RETURNS INTEGER LANGUAGE plpgsql AS $$ DECLARE max_id INTEGER; next_id INTEGER; BEGIN -- 해당 user에 대해서 최대값의 id 값을 구해서 max_id 변수에 할당 SELECT MAX(id) INTO max_id FROM directory WHERE user_id = _user_id; IF max_id IS NULL THEN -- max_id 값이 없다면 next_id := 0; -- 다음 id 값은 0으로 할당 ELSE next_id := max_id + 1; -- 다음 id 값은 최대값에 1을 더해서 할당 END IF; -- 다음 id 값을 콘솔에 출력해서 확인 RAISE NOTICE 'next_id = %', next_id; -- 다음 id 값으로 데이터 추가 INSERT INTO directory VALUES (next_id, _parent_id, _user_id); -- 다음 id 값 반환 RETURN next_id; END $$