Не используйте простой формат для SQL запросов; используйте sql .Identifier для таблиц, полей и используйте второй аргумент метода execute для передачи переменных (при необходимости).
from psycopg2.sql import Identifier, SQL
connection = psycopg2.connect("...")
cursor = connection.cursor()
suffix = "_test"
identifiers = [Identifier("some_schema"), Identifier("some_table"), Identifier("other_schema%s" % suffix), Identifier("other_table")]
query_2 = SQL("""select * from {}.{} where date(etl_date) = current_date
except select * from {}.{} where date(etl_date)=current_date""").format(*identifiers)
print(query_2.as_string(cursor)) # if you want to see the final query
cursor.execute(query_2)
Output
select * from "some_schema"."some_table" where date(etl_date) = current_date
except select * from "other_schema_test"."other_table" where date(etl_date)=current_date
Предполагается, что в одной базе данных имеется несколько схем, поскольку вы не можете легко выполнять перекрестные запросы к базе данных в PostgreSQL.