집 >데이터 베이스 >MySQL 튜토리얼 >다른 열에 종속된 PostgreSQL 시퀀스를 만드는 방법은 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!