>데이터 베이스 >MySQL 튜토리얼 >트리거를 사용하여 다른 열에 종속되는 PostgreSQL 시퀀스를 만드는 방법은 무엇입니까?

트리거를 사용하여 다른 열에 종속되는 PostgreSQL 시퀀스를 만드는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-24 06:10:11889검색

How to Create PostgreSQL Sequences Dependent on Another Column Using Triggers?

다른 열을 기반으로 한 PostgreSQL 시퀀스

PostgreSQL에서는 트리거를 통해 다른 열에 의존하는 시퀀스를 생성할 수 있습니다. 다음 테이블 구조를 고려하십시오.

列名 数据类型 说明
id integer 主键,外键关联其他表
seq integer 每个ID都有其自身的seq编号
data text 一些文本数据,与序列无关

id seq는 결합된 고유 키를 구성합니다.

예상한 결과를 얻으려면 things와 stuff라는 두 개의 테이블을 만들어야 합니다.

테이블 만들기:

<code class="language-sql">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)
);</code>

시퀀스 트리거 생성:

사물 테이블에 트리거를 설정하여 삽입된 데이터의 각 행에 대해 새 시퀀스를 생성합니다.

<code class="language-sql">CREATE FUNCTION make_thing_seq() RETURNS trigger
LANGUAGE plpgsql
AS $$
begin
  execute format('create sequence thing_seq_%s', NEW.id);
  return NEW;
end
$$;

CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq();</code>

채우기 시퀀스 트리거:

마지막으로, 각 삽입에 올바른 순서를 사용하여 stuff 테이블에 트리거를 만듭니다.

<code class="language-sql">CREATE FUNCTION fill_in_stuff_seq() RETURNS trigger
LANGUAGE plpgsql
AS $$
begin
  NEW.seq := nextval('thing_seq_' || 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 테이블에 삽입된 데이터는 해당 시퀀스를 생성하고 사용합니다. 예:

<code class="language-sql">insert into things (name) values ('Joe');
insert into things (name) values ('Bob');

insert into stuff (id, notes) values (1, 'Keychain');
insert into stuff (id, notes) values (1, 'Pet goat');
insert into stuff (id, notes) values (2, 'Family photo');
insert into stuff (id, notes) values (1, 'Redundant lawnmower');</code>

결과는 다음과 같습니다.

<code>| id | seq | notes |
|---|---|---|
| 1 | 1 | Keychain |
| 1 | 2 | Pet goat |
| 2 | 1 | Family photo |
| 1 | 3 | Redundant lawnmower |</code>

이 접근 방식은 things 테이블의 id 열을 기반으로 시퀀스를 효과적으로 생성하여 각 ID에 대해 고유한 시퀀스가 ​​생성되도록 합니다.

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

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