0
私はpostgres 9.4を実行しています。私は各行が指定されたユーザーの名前を持つイベントを表すイベントテーブルを持っています。更新時のデッドロック更新時のPostgres関数
event id (primary key)
event name
user_id (foreign key in users table)
私はイベントの名前をチェックするトリガ機能を持っており、それが特定の名前と一致した場合、一致するUSER_ID用のユーザー表の列にいくつかのデータを追加します。
しかし、私はデッドロックエラーが発生しています - 私はそれが私の機能を指定した方法によると思います。誰もエラーを避けるために関数を構造化する方法をアドバイスできますか?
BEGIN
IF NEW.name = 'labvar1' THEN
UPDATE users SET labvar1=new.name WHERE new.user_id = users.user_id;
UPDATE users SET labvar1_properties=new.properties WHERE new.user_id = users.user_id;
ELSIF NEW.name = 'labvar2' THEN
UPDATE users SET labvar2=new.name WHERE new.user_id = users.user_id;
UPDATE users SET labvar2_properties=new.properties WHERE new.user_id = users.user_id;
ELSIF NEW.name = 'labvar3' THEN
UPDATE users SET labvar3=new.name WHERE new.user_id = users.user_id;
UPDATE users SET labvar3_properties=new.properties WHERE new.user_id = users.user_id;
ELSIF NEW.name = 'labvar4' THEN
UPDATE users SET labvar4=new.name WHERE new.user_id = users.user_id;
UPDATE users SET labvar4_properties=new.properties WHERE new.user_id = users.user_id;
ELSIF NEW.name = 'labvar5' THEN
UPDATE users SET labvar5=new.name WHERE new.user_id = users.user_id;
UPDATE users SET labvar5_properties=new.properties WHERE new.user_id = users.user_id;
ELSE
RETURN null;
END IF;
RETURN NEW;
END;
ありがとうございます。私は、イベントごとにif/end ifブロックを分割してデッドロックを解決しました。 – theyletmehavecontrol