unaccent
django プロジェクトに postgres 機能を使用しています。
これにより、アプリデータベースが固有になり、他のデータベース(拡張子のないpostgresなど)を使用できるようにしたいと考えています。この場合、もちろん、私は使用しませんunaccent
ユーザーにとって透過的なものにしたいと思います。私のコードは次のようになります。
def get_objects(text):
try:
qs = MyModel.objects.extra(
where=[u"UPPER(unaccent("name")) LIKE UPPER(unaccent(%s))"],
params = [u"%{0}%".format(text)]
)
return list(qs)
except DatabaseError, msg:
qs = MyModel.objects.filter(name__icontains=text)
return list(qs)
残念ながら、unaccent
がデータベースにインストールされていない場合、 DatabaseError が発生しますが、2 番目のクエリは次のエラーで失敗します。
DatabaseError: current transaction is aborted, commands ignored until end of transaction block
トランザクションのサポートを追加してロールバックしようとしましたが、成功しませんでした。
unaccent
このエラーを管理し、利用可能かどうかに関係なくコードを機能させる最善の方法は何ですか?