>데이터 베이스 >MySQL 튜토리얼 >시퀀스와 트리거를 사용하여 PostgreSQL에서 하위 시퀀스를 생성하는 방법은 무엇입니까?

시퀀스와 트리거를 사용하여 PostgreSQL에서 하위 시퀀스를 생성하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-24 05:51:38965검색

How to Generate Subsequences in PostgreSQL Using Sequences and Triggers?

이 문서에서는 시퀀스와 트리거를 사용하여 PostgreSQL에서 하위 시퀀스를 생성하는 방법을 자세히 설명합니다. 이 시나리오에는 복합 기본 키(id, seq)가 있는 테이블이 포함되어 있으며 각 id.

에 대해 고유한 시퀀스를 생성하려면 사용자 지정 솔루션이 필요합니다.

해결책에는 두 개의 테이블을 만들고 트리거를 구현하는 것이 포함됩니다.

테이블 구조:

  • things: 이 테이블은 id를 기본 키로 사용하여 주요 엔터티를 저장합니다.
  • stuff: 이 테이블은 id(things을 참조하는 외래 키), seq(하위 시퀀스 번호) 및 notes을 포함하는 하위 시퀀스를 저장합니다. 기본키는 idseq의 조합입니다.

트리거 및 기능:

  1. things 테이블 트리거(make_thing_seq): 이 트리거는 테이블에 삽입될 때마다 things 실행됩니다. 각각의 새로운 thing_seq_{id}에 대해 id이라는 새 시퀀스를 생성합니다.

  2. 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>

이 설정을 사용하면 thingsstuff에 데이터를 삽입하면 각 id에 대해 고유한 하위 시퀀스가 ​​자동으로 생성되어 복합 기본 키의 무결성이 유지됩니다. 해당 ID에 대한 시퀀스가 ​​이미 존재하는 경우 오류를 방지하기 위해 IF NOT EXISTS 함수에 make_thing_seq 절이 추가되었습니다.

위 내용은 시퀀스와 트리거를 사용하여 PostgreSQL에서 하위 시퀀스를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.