私は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値をインクリメントしたいと思います。
何か案が?