私はトリガーを返す以下の関数を持っていますが、時には失敗する可能性があります。トリガーがトリガーすると、すべてのデータがデータベースに挿入されなくなります。だから、私は例外をキャッチしたい、それは動作しません。以下のトリガーの例外をどのように捕捉しましたか?
ポストグルでどのように例外をキャッチすることが可能ですか?
CREATE OR REPLACE FUNCTION update_function()
RETURNS TRIGGER
AS
'BEGIN
UPDATE
"EVENT"
SET
rules = (
SELECT
string_agg(DISTINCT st ->> ''id'', '', '') AS rules
FROM
"JSON_STORAGE" aes,
jsonb_array_elements("EVENT_DATA" -> ''fields'' #> ''{Tracking}'') AS st
WHERE
(st ->> ''id'' LIKE ''rule_%'') AND
aes."EVENT_ID" = NEW."EVENT_ID")
WHERE
NEW."EVENT_ID" = "EVENT"."EVENT_ID";
UPDATE
"EVENT"
SET
longitude =
SELECT
(CASE
WHEN (trim(both ''" '' FROM replace(regexp_replace("EVENT_DATA"-> ''fields'' -> ''custom_fields'' ->> ''device_data'', ''[\\]{2,}"([^,:])'', ''\1'', ''g''), ''\"'', ''"''))::json -> ''objects'' -> 0 -> ''data'' -> ''device_info_logs'' -> 0 ->> ''device_type'' = ''Android'') THEN
trim(both ''"'' FROM replace(regexp_replace("EVENT_DATA"-> ''fields'' -> ''custom_fields'' ->> ''inauth_device_data'', ''[\\]{2,}"([^,:])'', ''\1'', ''g''), ''\"'', ''"''))::json -> ''objects'' -> 0 -> ''data'' -> ''gps_location_logs'' -> 0 ->> ''location_wifi_longitude''
else
trim(both ''"'' FROM replace(regexp_replace("EVENT_DATA"-> ''fields'' -> ''custom_fields'' ->> ''inauth_device_data'', ''[\\]{2,}"([^,:])'', ''\1'', ''g''), ''\"'', ''"''))::json -> ''objects'' -> 0 -> ''data'' -> ''gps_location_logs'' -> 0 ->> ''longitude''
END),
latitude =
SELECT
(CASE
WHEN (trim(both ''" '' FROM replace(regexp_replace("EVENT_DATA"-> ''fields'' -> ''custom_fields'' ->> ''inauth_device_data'', ''[\\]{2,}"([^,:])'', ''\1'', ''g''), ''\"'', ''"''))::json -> ''objects'' -> 0 -> ''data'' -> ''device_info_logs'' -> 0 ->> ''device_type'' = ''Android'') THEN
trim(both ''"'' FROM replace(regexp_replace("EVENT_DATA"-> ''fields'' -> ''custom_fields'' ->> ''inauth_device_data'', ''[\\]{2,}"([^,:])'', ''\1'', ''g''), ''\"'', ''"''))::json -> ''objects'' -> 0 -> ''data'' -> ''gps_location_logs'' -> 0 ->> ''location_wifi_latitude''
else
trim(both ''"'' FROM replace(regexp_replace("EVENT_DATA"-> ''fields'' -> ''custom_fields'' ->> ''inauth_device_data'', ''[\\]{2,}"([^,:])'', ''\1'', ''g''), ''\"'', ''"''))::json -> ''objects'' -> 0 -> ''data'' -> ''gps_location_logs'' -> 0 ->> ''latitude''
END)
FROM
"JSON_STORAGE" aes
WHERE
aes."EVENT_ID" = NEW."EVENT_ID" AND
aes."EVENT_DATA"-> ''fields'' -> ''custom_fields'' ->> ''device_data'' LIKE ''%{%:%}%'' and
aes."EVENT_DATA"->''fields''->>''event_type''=''transaction_submission''
WHERE
NEW."EVENT_ID" = "EVENT"."EVENT_ID" AND
"EVENT".ip_geo_longitude IS NULL AND
"EVENT".ip_geo_latitude IS NULL;
exception when others then
raise notice ''The transaction is in an uncommittable state. ''
''Transaction was rolled back'';
RETURN
NEW;
END'
LANGUAGE 'plpgsql';
トリガーに構文エラーがあります... – joanolo
解決策を見つけましたか? – joanolo