ホームページ > データベース > mysql チュートリアル > トリガーを使用して別の列に依存する PostgreSQL シーケンスを作成する方法

トリガーを使用して別の列に依存する PostgreSQL シーケンスを作成する方法

Patricia Arquette
リリース: 2025-01-24 06:10:11
オリジナル
958 人が閲覧しました

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

別の列に基づく PostgreSQL シーケンス

PostgreSQL では、トリガーを通じて別の列に依存するシーケンスを作成できます。次のテーブル構造を考えてみましょう:

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

ID シーケンスは、結合された一意のキーを構成します。

期待される結果を達成するには、thing と thing という 2 つのテーブルを作成する必要があります。

テーブルの作成:

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)
);
ログイン後にコピー

シーケンストリガーの作成:

Things テーブルにトリガーを設定して、挿入されたデータの各行に新しいシーケンスを作成します:

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();
ログイン後にコピー

フィルシーケンストリガー:

最後に、スタッフ テーブルにトリガーを作成し、挿入ごとに正しいシーケンスを使用するようにします。

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();
ログイン後にコピー

デモ:

Things および Stuff テーブルに挿入されたデータは、対応するシーケンスを作成して使用します。例:

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>| id | seq | notes |
|---|---|---|
| 1 | 1 | Keychain |
| 1 | 2 | Pet goat |
| 2 | 1 | Family photo |
| 1 | 3 | Redundant lawnmower |</code>
ログイン後にコピー

このアプローチでは、Things テーブルの ID 列に基づいてシーケンスを効果的に作成し、ID ごとに一意のシーケンスが生成されるようにします。

以上がトリガーを使用して別の列に依存する PostgreSQL シーケンスを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート