0
PostgreSQL環境で、挿入をブロックするために以下のトリガーを作成しました0000-00-00 00:00:00タイムスタンプデータ型フィールドはサポートされていないためです。PostgreSQLがブロックするための挿入トリガー0000-00-00 00:00:00
create function my_trigger_func() returns trigger as $$
begin
if NEW.t_date = '0000-00-00 00:00:00' then
NEW.t_date := '0001-01-01 00:00:00';
end if;
return new;
end
$$ language plpgsql;
CREATE TRIGGER my_trigger
BEFORE INSERT ON timezone.test
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_func()
上記のトリガ機能が正常に作成されます。私は次のエラーを取得しています
Insert into timezone.test (t_id,t_date) values ('3','0001-01-01 01:10:01');
::私は以下のINSERTコマンドを実行したときにしかし、その後、
ERROR: date/time field value out of range: "0000-00-00 00:00:00"
LINE 1: SELECT NEW.t_date = '0000-00-00 00:00:00'
^
QUERY: SELECT NEW.t_date = '0000-00-00 00:00:00'
CONTEXT: PL/pgSQL function my_trigger_func() line 3 at IF
********** Error **********
ERROR: date/time field value out of range: "0000-00-00 00:00:00"
SQL state: 22008
Context: PL/pgSQL function my_trigger_func() line 3 at IF
は親切に私が間違っているつもりですどこ私に知らせてください。
最初にトリガーを必要としなかったようです(データベースは無効なデータを拒否します)。おそらくあなたが望むのは、varcharから日付に変換し、あなたが記述している方法で無効な入力を修正する(またはアプリケーションコードがそれを処理させる)カスタム関数です。 – Thilo
@ lad2025:ご意見ありがとうございます。しかし、上記のトリガを変更してそれらの値を無視し、代わりに正しい値に置き換える方法はありません。 – arsm4
@Thilo挿入を行う前にこのカスタム関数をどのように作成すればよいか、もっと教えてください。なぜなら、私のテーブルには多くの列があり、このサポートされていないタイムスタンプがあるため、必要な他の列には何も表示されません。したがって、これらの値を修正するためにデータベースレベルでトリガーを作成し、挿入全体が失敗しないようにしたいと考えました。ご理解頂けるとありがたいです – arsm4