Call dblink from a trigger function
As you have nothing dynamically built in your query, you don't have to use EXECUTE at all.

Inside the function body, you can simply do an INSERT if temp_table already exists:

INSERT INTO temp_table (fielda, fieldb, fielbc)
SELECT a, b, c 
  FROM dblink('dbname=dbname port=5432 host=a.b.c.d user=user password=pw', 
              E'SELECT fielda, fieldb, fieldc FROM data_table')
       AS t(a, b, c);


If the table is not there yet, you can replace the INSERT line with

CREATE TEMPORARY TABLE AS
...


Note that in your present approach (SELECT ... INTO temp_table) the table that is being created is not a temporary table, and on the next run the trigger will run into an error saying the table already exists.