Closed masayuki14 closed 6 years ago
登録された内容をSQLで見るには
select prosrc from pg_proc where proname = 'insert_trigger' limit 1 ;
なのだが 0row なんだよね。困った。
insert_tirgger
oh typo!!
# select prosrc From pg_proc where proname = 'insert_trigger';
prosrc
-----------------------------------------
+
-- RETURNS trigger +
+
BEGIN +
NEW.created_at := CURRENT_TIMESTAMP;+
NEW.updated_at := CURRENT_TIMESTAMP;+
RETURN NEW; +
END; +
+
(1 row)
OK
このファンクションをトリガーに登録する。
のまえに、ファンクション名を変えた。
insert_trigger
=> insert_trigger_function
CREATE TRIGGER insert_trigger
BEFORE INSERT
ON public.tripadvisor_businesses
FOR EACH ROW
EXECUTE PROCEDURE public.insert_trigger_function();
COMMENT ON TRIGGER insert_trigger ON public.tripadvisor_businesses
IS 'Set created_at and updated_at .';
いちどテーブルのデータを消して入れ直してみる。
truncate tripadvisor_business;
$ embulk run config.yml
select * from tripadvisor_businesses limit 1;
-[ RECORD 1 ]----+--------------------------------------------------------------
---------------------------------------------------------
detail_url | https://www.tripadvisor.com/Attraction_Review-g298564-d117491
2-Reviews-Yasaka_Shrine-Kyoto_Kyoto_Prefecture_Kinki.html
title | Yasaka Shrine
rate | 4.0
review | 1254
part | Gion
tags | Sacred & Religious Sites,Historic Sites,Sights & Landmarks
rating5 | 351
rating4 | 640
rating3 | 238
rating2 | 13
rating1 | 13
street_address | 625 Giommachi Kitagawa, Higashiyama-ku
address_locality | Kyoto
postal_code | 605-0073,
place_id_g | g298564
place_id_d | d1174912
lng | 135.7783
lat | 35.003517
image |
created_at | 2018-03-01 08:13:21.622741
updated_at | 2018-03-01 08:13:21.622741
ちゃんと動いた。とりあえずOK。
コレをスクリプトで設定したいなぁ。
update 用のtrigger_functionを登録する。
pgAdmin から GUI で登録する。
SQL タブに登録用のコードが吐かれてる。
右クリックメニューの CREATE Script
で後から見れる。
JSONのデータ1つずつかえて updated_at
が更新されるかテスト。
OKだった・
psql -U $POSTGRES_USER -d $POSTGRES_DB -f insert_trigger_function.plpgsql
SQLの実行になるので、 CREATE TABLE
と同じようにコマンドラインから実行できる。
ERROR: function "insert_trigger_function" already exists with same argument types
ALTER FUNCTION
create だけだとエラーになる。
ドキュメントどおりだと CREATE
=> CREATE OR REPLACE
にすればOK。
# psql -U $POSTGRES_USER -d $POSTGRES_DB -f insert_trigger_function.plpgsql
CREATE FUNCTION
ALTER FUNCTION
DROP FUNCTION IF EXISTS XXX();
を入れたほうがいいのか?
CREATE TRIGGER
には OR REPLACE
とか IF EXISTS
が無いので、さきに DROP
するようにしよう。
pgadmin で trigger function を登録してみる。