database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10472 게시물 읽기
No. 10472
파티션 테이블 자동화 관련
작성자
DBDBDEEP
작성일
2024-04-30 14:40
조회수
79

안녕하세요 현재 A라는 테이블을 사용하고 해당 테이블은 MONTH를 기준으로 파티션 테이블을 구성하고 있는 상황입니다. 

A라는 테이블에 데이터를 insert하기 전에 트리거를 통해서 함수를 호출하고 MONTH릍 이용해 만들어진 파티션이 있는지 확인하고 없으면 파티션을 우선 생성해준 뒤

데이터를 insert하는 방식으로 파티션 테이블을 자동생성하여 관리하도록 하려합니다.


트리거는 

create trigger create_partition_trigger before

 

insert

 

on

 

Bschema.Atable for each row execute function Bschema.create_partition_if_not_exists()

 

와 같고


함수는 

 

 

CREATE OR REPLACE FUNCTION Bschema.create_partition_if_not_exists()

 

RETURNS trigger

 

LANGUAGE plpgsql

 

AS $function$

 

DECLARE

 

month text;

 

partition_name text;

 

 

 

 

 

BEGIN

 

month := NEW.month;

 

 

 

 

 

-- month를 기준으로 파티션 이름을 생성합니다.

 

partition_name := 'Atable_' || month;

 

 

 

-- 생성된 파티션 테이블이 존재하지 않으면 파티션을 추가합니다.

 

IF NOT EXISTS (

 

SELECT 1 FROM pg_catalog.pg_class WHERE relname = partition_name

 

) THEN

 

-- 필요한 파티션을 추가하기 위한 SQL 쿼리를 생성합니다.

 

raise notice 'PASSED!!';

 

EXECUTE format('CREATE TABLE IF NOT EXISTS %I PARTITION OF Bschema.Atable FOR VALUES IN (%I)', partition_name, month);

 

EXECUTE format('CREATE INDEX %I || ''_month_idx'' ON %I USING btree(%I)',partition_name,month);

 

END IF;

 

 

 

RETURN NEW;

 

END;

 

$function$

 

;

 

와 같습니다.


그러나 해당 트리거와 함수를 적용 후 데이터 insert시 파티션테이블 없는 데이터의 경우 

 

SQL Error [23514]: ERROR: no partition of relation "Atable" found for row

  Detail: Partition key of the failing row contains (month) = (202512).


Error position:

처럼 에러를 반환하며 파티션 테이블 생성하지 못하는데요. DB 고수님들의 도움요청드려요.

이 글에 대한 댓글이 총 1건 있습니다.

insert 에 걸어둔 트리거는 이미 하위 파티션 테이블이 결정난 버린 상태이기 때문에,

그 트리거 함수가 실행되기도 전에 '테이블 없음' 오류를 낼것입니다.


'insert 하려고 하는데, 없으면 만들어야지' 라는 컨셉 자체가 문제였습니다.


하위 테이블을 만드는 작업과 insert 작업을 분리하면 될 것 같네요.

 

김상기(ioseph)님이 2024-05-02 14:53에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10473오라클의 패키지 오브젝트를 pg로 변환하는 방법 문의드립니다 [1]
새내기
2024-05-10
44
10472파티션 테이블 자동화 관련 [1]
DBDBDEEP
2024-04-30
79
10471오라클에서 postgresql로 dblink 걸 수 있는 방법 문의드립니다. [1]
초보dba
2024-04-24
96
10467postgres 프로세스 일시중단
용암그라탕
2024-04-08
144
10466pgpool 정족수 [3]
찌르버드
2024-04-01
191
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다