NULLを返す関数を呼ぶトリガーを作成

testdb=# \df
                            List of functions
 Schema |      Name       | Result data type | Argument data types | Type 
--------+-----------------+------------------+---------------------+------
 public | log_time_writer | trigger          |                     | func
 public | sample_func     | boolean          | text                | func
 test3  | sample_func     | trigger          |                     | func
(3 rows)
testdb=# \d sample
               Table "test3.sample"
 Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------
 id     | integer |           |          | 
 name   | text    |           |          | 
 date   | date    |           |          | 
Triggers:
    sample_trg AFTER INSERT ON sample FOR EACH ROW EXECUTE PROCEDURE sample_func()
testdb=# SELECT * FROM sample;
 id | name |    date    
----+------+------------
  1 | 木村 | 2017-11-05
  2 | 田中 | 2017-11-07
  3 | 小林 | 2018-01-28
  4 | 沢田 | 2018-02-02
(4 rows)

タイミングのオプションにAFTERが指定されているため、トリガーがNULLを返す場合もINSERT処理は実行される。

testdb=# INSERT INTO sample VALUES(5,'町野','2018-05-05');
INSERT 0 1
testdb=# SELECT * FROM sample;
 id | name |    date    
----+------+------------
  1 | 木村 | 2017-11-05
  2 | 田中 | 2017-11-07
  3 | 小林 | 2018-01-28
  4 | 沢田 | 2018-02-02
  5 | 町野 | 2018-05-05
(5 rows)
testdb=# SELECT sample_func(NULL);
 sample_func 
-------------
 f
(1 row)

この記事が気に入ったらサポートをしてみませんか?