From: | Vijaykumar Jain <vijaykumarjain(dot)github(at)gmail(dot)com> |
---|---|
To: | Atul Kumar <akumar14871(at)gmail(dot)com> |
Cc: | pgsql-general <pgsql-general(at)lists(dot)postgresql(dot)org> |
Subject: | Re: trigger impacting insertion of records |
Date: | 2021-05-06 11:38:01 |
Message-ID: | CAM+6J94chzo9ZtucFyGt6ms-TigGRaNqwi2QEVL3QtM8g132AA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
just simplified, but it works fine for me.
create table example(id int primary key, value text);
create or replace function trg_fn() returns trigger language plpgsql as $$
begin
RAISE NOTICE 'trigger_func(%) called: action = %, when = %, level =
%', TG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;
RAISE NOTICE 'id=%, value=%', NEW.id, NEW.value;
update example set value=replace(value,'_',' ') where left(value,3)
= 'US_';
return new;
end; $$;
create trigger after_insert_trigger after insert ON example for each row
execute function trg_fn();
insert into example select x, case when x % 2 = 0 then 'US_' || x::text
else x::text end from generate_series(1, 100) x;
NOTICE: trigger_func(<NULL>) called: action = INSERT, when = AFTER, level
= ROW
NOTICE: id=99, value=99
NOTICE: Returned 0 rows
NOTICE: trigger_func(<NULL>) called: action = INSERT, when = AFTER, level
= ROW
NOTICE: id=100, value=US_100
NOTICE: Returned 0 rows
INSERT 0 100
-- do not see any values with US_, although i inserted 50 of them.
postgres=# select count(*) from example where value like 'US\_%';
count
-------
0
(1 row)
-- do see 50 "US<space>" values as expected.
postgres=# select count(*) from example where value like 'US %';
count
-------
50
(1 row)
Can you verify accountnumber field does not have any spaces etc at the
beginning.
unless there is some conflicting stuff modifying rows, i think this should
be ok.
you can
lock TABLE example IN exclusive mode; -- DO NOT DO IT IF IT IMPACTS
ANYTHING IN PRODUCTION
On Thu, 6 May 2021 at 13:15, Atul Kumar <akumar14871(at)gmail(dot)com> wrote:
> Hi,
>
> I have simple table having structure like given below:
>
> \d bp_ach_trans
> Table "bonzipay.bp_ach_trans"
> Column | Type |
> Modifiers
>
> --------------------+------------------------+-------------------------------------------------------------------
> bptransid | integer | not null default
> nextval('bp_ach_trans_bptransid_seq1'::regclass)
>
> filename | character varying(50) |
> payment_status | character varying(30) |
> settledate | character varying(15) |
> payment_pastransid | bigint |
> tname | character varying(250) |
> code | character varying(5) |
> error_txt | character varying(200) |
> routingnumber | character varying(15) |
> tracenumber | character varying(10) |
> accountnumber | character varying(15) |
> bankaccountnumber | character varying(17) |
> type | character varying(1) |
> amount | numeric |
> site | character varying(30) |
> accountype | character varying(2) |
> tranid | character varying(15) |
>
> Triggers:
> ins_ussf_rec AFTER INSERT ON bp_ach_trans FOR EACH ROW EXECUTE
> PROCEDURE ussf_accountnumber_update()
>
>
>
> the function definition is like below:
>
> CREATE OR REPLACE FUNCTION bonzipay.ussf_accountnumber_update()
> RETURNS trigger
> LANGUAGE plpgsql
> AS $function$ BEGIN update bonzipay.bp_ach_trans set
> accountnumber=replace(accountnumber,'_',' ') where
> left(accountnumber,3) = 'US_'; RETURN NEW; END; $function$
>
>
> my query is:
>
> when I am inserting around 1000 records in the table having
> accountnumber not having value 'US_', I am getting only 300 records
> insertion. remaining around 700 values are not getting inserted.
>
> why this strange behavior is happening, as I am not inserting any
> record having value 'US_' even after that all records are not
> inserting.
>
> Any suggestions are welcome.
>
>
>
> Regards,
> Atul
>
>
>
--
Thanks,
Vijay
Mumbai, India
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Luzanov | 2021-05-06 13:12:15 | Re: Strange behavior of function date_trunc |
Previous Message | Jian He | 2021-05-06 09:48:12 | Chain Hashing |