を記録チェーンを作る:Postgresは、私はpostgresの9.4でテーブルを持っていると私は次の操作を実行する必要がある1つのテーブルに
新しい挿入されたレコードが来るとき、私は与えられたパラメータを持つ前のレコードを検索し、それがNEXT_MESSAGEです割り当てる必要があります'列の値を新しく生成されたレコードに追加します。ですから、私は、各レコードが与えられたフィルタを使って次のレコードへの参照を持っていることを望みます。たとえば 'session_id'です。したがって、session_id = 5の場合、seesion_id = 5のすべてのレコードは、次のレコードを参照する必要があります。以前のレコードを選択してこのフィールドを設定するトリガーを作成しました。しかし、それは悪いですし、高度に読み込まれたdbテーブルでは動作しません。どうやってするか?私のトリガーだ
:
CREATE OR REPLACE FUNCTION "public"."messages_compute_next_message"() RETURNS trigger
VOLATILE
AS $dbvis$
DECLARE previous_session_message integer;
BEGIN
/*NEW.next_message_id=NEW.id;*/
update message set next_message_id=NEW.id where id=(select max(c.id) from message c where c.session_id=NEW.session_id and c.id<>NEW.id);
RETURN NEW;
END
$dbvis$ LANGUAGE plpgsql
私はあまりにも頻繁にレコードを投稿する場合、私はnext_message_id分野で多くのNULL値を取得します。論理的です。それ以外の場合は、すべてのインサートのテーブル全体をブロックする必要があります。どのようにポストグルでそれを正しく行うには?
ありがとうございました!それは助けになった! – avalon