Include single quote string in redshift dynamic SQL
While the QUOTE_LITERAL() function is helpful in specific contexts, I think you still need to manually escape the single quotes when you use Dynamic SQL.
So your query should follow this:
Execute 'Select *, ID as Main_Id, ' ||
         'schema.func_date(quote_literal(''2020-02-20''),quote_literal(''ST'')), '||
         'from main_table'