Insert RECORD into a table in a trigger function
Actually, you do not have to expand the record manually. As long as number, sequence and types of columns match between the two tables, you can use this much simpler form:

EXECUTE 'INSERT INTO my_table SELECT ($1).*'
USING NEW;


Since your table name seems to be stable, you do not even need dynamic SQL with EXECUTE. Just a plain INSERT:

INSERT INTO my_table SELECT (NEW).*


The parentheses are required for a composite type to make the syntax unambiguous.

Ask yourself what may change in your app in the future:


If the target table should stay in sync with the source table (or target and source are the same), then it's better not to list columns explicitly.
If you want to select only certain columns and do not want to change that with possible updates to the source or target table, it's better to supply a column list.