私は2つのテーブルを持っています:
CREATE TABLE "user"
(
username character varying(35) NOT NULL,
CONSTRAINT user_pk PRIMARY KEY (username)
)
CREATE TABLE item
(
id serial NOT NULL,
username character varying(35),
user_item_number integer,
item_value character varying(35),
CONSTRAINT item_pk PRIMARY KEY (id),
CONSTRAINT item_fk FOREIGN KEY (username)
REFERENCES "user" (username) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT unique_item_username UNIQUE (username, user_item_number)
)
user_item_number
ごとに個別に自動インクリメントしたいと思いますusername
。次の画像は例を示しています。For each username
: ( user1
, user2
)user_item_number
は 1 から始まり、1 ずつ増加します。
user_item_number
挿入する前に、挿入される最大値を取得username
してインクリメントするトリガーを使用する必要があると思います。しかし、そのトリガーの書き方がわかりません。
また、同時アクセスを考慮する方法もわかりません(同時アクセスは、同じ値の複数の行を挿入しますusername
)。username
同じ 2 つの行が挿入されたときに制約違反エラーが発生したくありません。user_item_number
そのトリガーでそのエラーをキャッチし、もう一度 user_item_number
値をインクリメントしたいと思います。
何か案が?