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

다른 열에 종속된 PostgreSQL 시퀀스를 만드는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-24 05:58:13470검색

How to Create a PostgreSQL Sequence Dependent on Another Column?

PostgreSQL: 다른 열을 기반으로 보조 시퀀스 생성

PostgreSQL에서는 다른 열에 의존하는 시퀀스를 생성하여 테이블의 하위 그룹 내에서 시퀀스 번호를 생성할 수 있습니다.

다음 형식을 고려하세요.

<code class="language-sql">CREATE TABLE stuff (
    id integer PRIMARY KEY,
    seq integer NOT NULL,
    data text
);</code>

다음 예와 마찬가지로 id와 seq의 각 조합이 고유해야 합니다.

<code>ID  | SEQ   | DATA
----+------ +-------------------
 1  | 1     | Quick brown fox...
 1  | 2     | Quick brown fox...
 1  | 3     | Quick brown fox...
 2  | 1     | Quick brown fox...
 3  | 1     | Quick brown fox...</code>

보조 테이블 및 트리거 생성

이렇게 하려면 두 개의 테이블과 트리거를 만들어야 합니다.

<code class="language-sql">CREATE TABLE things (
    id SERIAL PRIMARY KEY,
    name text
);

CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW
    EXECUTE PROCEDURE nextval('things_id_seq');

CREATE SEQUENCE things_id_seq;</code>

things 테이블은 id 열을 포함하는 상위 테이블입니다. make_thing_seq 트리거는 things 테이블에 삽입된 각 행에 대해 thing_seq_<thing_id>이라는 새 시퀀스를 자동으로 생성합니다.

항목 순서 채우기

이제 stuff 테이블의 seq 열을 채우는 두 번째 트리거를 생성해야 합니다.

<code class="language-sql">CREATE FUNCTION fill_in_stuff_seq() RETURNS trigger AS $$
BEGIN
  NEW.seq := nextval('thing_seq_' || NEW.id);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER fill_in_stuff_seq BEFORE INSERT ON stuff FOR EACH ROW
    EXECUTE PROCEDURE fill_in_stuff_seq();</code>

이 트리거는 stuff 테이블에 새 행이 삽입될 때 해당 시퀀스를 검색하고(id 열을 기준으로) 다음 값을 seq 열에 할당하도록 합니다. 함수의 언어가 PL/pgSQL임을 명확하게 지정하기 위해 LANGUAGE plpgsql 문이 여기에 추가되었습니다.

데모

일부 데이터를 삽입하고 시퀀스 생성을 확인합니다.

<code class="language-sql">INSERT INTO things (name) VALUES ('Joe');
INSERT INTO things (name) VALUES ('Bob');
SELECT * FROM things;

-- 检查序列表
\d+ things_id_seq

INSERT INTO stuff (id, data) VALUES (1, 'Keychain');
INSERT INTO stuff (id, data) VALUES (1, 'Pet goat');
INSERT INTO stuff (id, data) VALUES (2, 'Family photo');
INSERT INTO stuff (id, data) VALUES (1, 'Redundant lawnmower');
SELECT * FROM stuff;</code>

결과는 id 열을 기반으로 시퀀스 자동 할당을 보여줍니다. d things_id_seq 명령은 시퀀스 세부 정보를 표시하는 데 사용됩니다.

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

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