2017-08-25 10 views
2

タイムスタンプタイプのタイムスタンプのDTUpdatedという名前の列があります。前回のトリガDateUpdatedが失敗しました

私は、自動的にすべての変更と、その列を更新する機能を作成しました:

CREATE OR REPLACE FUNCTION public."RowModifiedFunction"() 
    RETURNS trigger AS $$ 

BEGIN 
    NEW.DTUpdated = clock_timestamp(); 
    RETURN NEW; 
END; 

とそのテーブルにトリガを

CREATE TRIGGER "RowModifiedTrigger" 
    BEFORE UPDATE 
    ON public."Departments" 
    FOR EACH ROW 
    EXECUTE PROCEDURE public."RowModifiedFunction"(); 

しかし、私は、私はエラーを取得する列を変更し、それを適用します:

"Record new has no field dtupdated" (in lowercase).

ここで問題は何ですか?事前に感謝します マルコス

答えて

2

PostgreSQLでは、大文字を含む任意の名前に「これらの引用符」が必要です。

NEW."DTUpdated" = clock_timestamp(); 

NB:

CREATE OR REPLACE FUNCTION public."RowModifiedFunction"() 
    RETURNS trigger AS $$ 

BEGIN 
    NEW."DTUpdated" = clock_timestamp(); 
    RETURN NEW; 
END; 
+0

ありがとうログジャセン、あなたは私の日を保存します。私はsqlserverから来て... – Marcos

+0

それはちょうどすべての小文字を使用することをお勧めし、引用符は必要ありません:) – Jasen

0

あなたの列が大文字と小文字が区別される場合は、二重引用符を使用し、通常の代わりに、このようなトリガーのnow()にデフォルト値を設定します。唯一のケースでは、特定の変更のみで起動したい場合にトリガが必要です

関連する問題