sql >> データベース >  >> RDS >> PostgreSQL

子テーブル挿入のトリガーを作成すると、紛らわしいエラーが返されます

    あなたのソリューションは、行タイプのNEWの受け渡しを修正します 変数。ただし、コードに卑劣なSQLインジェクションの穴があり、それは特に危険です SECURITY DEFINERで 働き。ユーザー入力は絶対にしてはいけません エスケープされていないSQLコードに変換されます。

    このように消毒します:

    CREATE OR REPLACE FUNCTION trg_test_log()
      RETURNS trigger AS
    $$
    BEGIN
        EXECUTE 'INSERT INTO public.' || quote_ident('testlog_' || NEW.name)
             || ' SELECT ($1).*'
        USING NEW;
    
        RETURN NULL;
    END
    $$
    LANGUAGE plpgsql SECURITY DEFINER;
    

    また:

    • OLD INSERTで定義されていません トリガー。
    • 変数は必要ありません。 plpgsqlでは割り当てが比較的高価です。


    1. C#をOracleデータベースに接続するために必要な最小クライアントフットプリントはどれくらいですか?

    2. 文字列の一部を置き換えて、列の値を更新します

    3. オープンソースデータが大きくなる:MySQL、NoSQL、またはその両方を選択する

    4. 階層データをコピーするときに親子関係を保持する