집 >데이터 베이스 >MySQL 튜토리얼 >시퀀스와 트리거를 사용하여 PostgreSQL에서 하위 시퀀스를 생성하는 방법은 무엇입니까?
이 문서에서는 시퀀스와 트리거를 사용하여 PostgreSQL에서 하위 시퀀스를 생성하는 방법을 자세히 설명합니다. 이 시나리오에는 복합 기본 키(id, seq)가 있는 테이블이 포함되어 있으며 각 id
.
해결책에는 두 개의 테이블을 만들고 트리거를 구현하는 것이 포함됩니다.
테이블 구조:
id
를 기본 키로 사용하여 주요 엔터티를 저장합니다.id
(things
을 참조하는 외래 키), seq
(하위 시퀀스 번호) 및 notes
을 포함하는 하위 시퀀스를 저장합니다. 기본키는 id
과 seq
의 조합입니다.트리거 및 기능:
things
테이블 트리거(make_thing_seq
): 이 트리거는 테이블에 삽입될 때마다 후things
실행됩니다. 각각의 새로운 thing_seq_{id}
에 대해 id
이라는 새 시퀀스를 생성합니다.
stuff
테이블 트리거(fill_in_stuff_seq
): 이 트리거는 테이블에 삽입될 때마다 전에stuff
실행됩니다. 삽입된 thing_seq_{id}
을 기반으로 적절한 시퀀스(id
)에서 다음 값을 검색하여 seq
열에 할당합니다.
구현 예:
다음 코드는 테이블 생성 및 트리거 구현을 보여줍니다.
<code class="language-sql">-- Create the tables CREATE TABLE things ( id serial primary key, name text ); CREATE TABLE stuff ( id integer references things, seq integer NOT NULL, notes text, primary key (id, seq) ); -- Trigger in things table to create new sequences CREATE OR REPLACE FUNCTION make_thing_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin EXECUTE format('CREATE SEQUENCE IF NOT EXISTS thing_seq_%s', NEW.id); -- Added IF NOT EXISTS RETURN NEW; end; $$; CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq(); -- Trigger in stuff table to use correct sequence CREATE OR REPLACE FUNCTION fill_in_stuff_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin NEW.seq := nextval(format('thing_seq_%s', NEW.id)); RETURN NEW; end; $$; CREATE TRIGGER fill_in_stuff_seq BEFORE INSERT ON stuff FOR EACH ROW EXECUTE PROCEDURE fill_in_stuff_seq();</code>
이 설정을 사용하면 things
및 stuff
에 데이터를 삽입하면 각 id
에 대해 고유한 하위 시퀀스가 자동으로 생성되어 복합 기본 키의 무결성이 유지됩니다. 해당 ID에 대한 시퀀스가 이미 존재하는 경우 오류를 방지하기 위해 IF NOT EXISTS
함수에 make_thing_seq
절이 추가되었습니다.
위 내용은 시퀀스와 트리거를 사용하여 PostgreSQL에서 하위 시퀀스를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!