Нашел решение, может быть пригодится потом кому-нибудь.
columns обрабатываем аналогично переменным year и station.
sql запрос будет выглядеть так 
cur.execute("SELECT {} FROM fact_indicators WHERE fact_year = ANY(%s) AND fact_indicators = ANY(%s) AND fact_station_name = ANY(%s);".format(",".join(["\"{}\"".format(c) for c in columns])),(year, indicators, station))
index.html
<table class="table-fill">
  <thead>
    <tr>
      {% for column in columns %}
      <th>{{ column }}</th>
      {% endfor %}
    </tr>
  </thead>
{% for row in rows %}
    <tr>
      {% for column in columns %}
      <td>{{ row[loop.index0] }}</td>
      {% endfor %}
    </tr>
{% endfor %}
    </tbody>
  </table>
</body>