3

給与額を格納するトリガーを作成しますが、挿入のクエリを起動すると

INSERT INTO employees(
            employee_id, first_name, last_name, email, phone_number,  hire_date, 
            job_id, salary, commission_pct, manager_id, department_id)
    VALUES (2002,'poiuy','patel','bhargavgor@dfghj',9898562123,'2012-07-31 00:00:00','IT_PROG',4500.00,0.00,100,60);

次に、制限を設定するために次のエラーが表示されmax_stack_depthますので、このエラーを解決するアイデアを私に与えることができます..

構成ファイルの値も変更しようとmax_stack_depthしましたが、機能しません

以下のようなエラー

ERROR:  stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.
4

2 に答える 2

4

直接または間接的に、テーブルが直接またはトリガーを介して呼び出されたかどうかを確認せずに、テーブルに対してON INSERT OR UPDATEトリガーを実行していると思います。employeesUPDATEemployees

これはプログラミングの間違いであることが多く、トリガーでの値を変更する代わりにUPDATE、テーブルでを実行しています。employeeBEFORE INSERT OR UPDATE ... FOR EACH ROWNEW

2つのトリガー間の相互再帰である場合がありますが、これは対処が困難です。残念ながら、トリガーが直接のクライアントステートメントによって呼び出されたのか、別のストアドプロシージャまたはトリガーを介して呼び出されたのかを検出する方法を知りません。通常、相互再帰を回避するための設計変更が必要です。

PostgreSQLでの再帰トリガーの防止を参照してください。

于 2012-08-01T13:29:07.997 に答える
2

max_stack_depth を変更しているときに表示されるエラー メッセージを投稿できますか。

Linux システムの「 ulimit -s 」は、スタックの深さを示します。max_stack_depth を実際のサーバー制限 (ulimit -s) より 1 つか 2 つ少なくしてください。

設定後、リロードしてください。

于 2012-08-01T11:27:47.280 に答える