トリガに問題があります。 DB内の各ユーザーが使用している行の数を追跡するためのトリガーと関数を作成しました。トリガと関数のINSERT部分は正常に機能しますが、DELETEは何も行いません。私のアプリケーションに行を挿入すると、行数が上がります。削除すると、行数は変更されません。ここでPostgresトリガはINSERTでは機能し、DELETEでは機能しません
は、私が数えた行を保つTABLEである:ここでは
Table "public.rowcount"
Column | Type | Modifiers
------------+---------+-----------
user__id | integer | not null
table_name | text | not null
total_rows | bigint |
は私TRIGGERです:
CREATE TRIGGER countrows_m_time
AFTER INSERT OR DELETE on m_time
FOR EACH ROW EXECUTE PROCEDURE count_rows_m_time();
そして、ここでは、FUNCTIONです:
CREATE OR REPLACE FUNCTION count_rows_m_time()
RETURNS TRIGGER AS
'
BEGIN
IF TG_OP = ''INSERT'' THEN
UPDATE rowcount
SET total_rows = total_rows + 1
WHERE table_name = TG_RELNAME
AND user__id = (SELECT user__id from vi_m_time_users where m_value_id = NEW.m_value_id);
ELSIF TG_OP = ''DELETE'' THEN
UPDATE rowcount
SET total_rows = total_rows - 1
WHERE table_name = TG_RELNAME
AND user__id = (SELECT user__id from vi_m_time_users where m_value_id = OLD.m_value_id);
END IF;
RETURN NULL;
END;
' LANGUAGE plpgsql;
任意のアイデア? 多くのおかげで、NULL
を返す シェイ
トリガが私にはOKと思われると思います。おそらく問題はどこか他の場所ですか?私はいくつかの外部キーまたは他のトリガーのために内部選択が何も返さないと思いますか?関係するすべてのテーブルのスキーマを教えてください。または、トリガーを変更して、BEFORE DELETEを実行してみてください。 – strkol
私はstrkolに同意します.BEFOREトリガーが必要です –
これは簡単に試すことができます。私はそれにショットを与え、結果を報告します。 –