SQLAlchemy Postgres upsert с частичным индексом

#postgresql #sqlalchemy #upsert #partial-index

#postgresql #sqlalchemy #upsert #частичный индекс

Вопрос:

У меня есть таблица с именем Person с тремя полями — ID, город и имя. Город может быть нулевым, поэтому у меня есть два частичных уникальных индекса — один для ID и city, где city не равен null, и один для ID, где city равен null.

Теперь я хочу иметь оператор upsert с использованием SQLAlchemy с этими частичными индексами, но я не могу разобраться в синтаксисе. В настоящее время у меня есть:

 table = models.Person.__table__
insert_statement = insert(table, upsert_values)
update_dict = {c.name: c for c in insert_statement.excluded if c.name != "id"}
upsert_statement = insert_statement.on_conflict_do_update(
    index_elements=[table.c['id'], table.c['city']],
    set_=update_dict
)
  

но когда я пытаюсь выполнить, я получаю

ошибка sqlalchemy.exc.ProgrammingError: (psycopg2.ошибки.InvalidColumnReference) нет ограничения уникальности или исключения, соответствующего спецификации ON CONFLICT

Как это может работать? Есть ли другой способ, кроме запуска чистого SQL?