1

コンテキストについては、次のようなものを照会したいと思います。

select point '(1,1)' <@ box '((0,0),(2,2))';

私はこのようなことを試しました:

CREATE TABLE tbl (latlng POINT NOT NULL);

box = [[22.268764039073968, -140.09765625000003], [61.438767493682825, -56.42578125000001]]
await pool.fetch(f'SELECT * FROM tbl WHERE latlng <@ $1;', box)

それから私はこれを試しました:

from asyncpg.types import Point, Box

v = [[22.268764039073968,-140.09765625000003],[61.438767493682825,-56.42578125000001]]
box = Box(Point(v[0][0], v[0][1]), Point(v[1][0], v[1][1]))
await pool.fetch(f'SELECT * FROM tbl WHERE latlng <@ $1;', box)

どちらの試行でも、次のエラーが発生します。

asyncpg.exceptions.AmbiguousFunctionError: operator is not unique: point <@ unknown
HINT:  Could not choose a best candidate operator. You might need to add explicit type casts.

asyncpg でこのパラメーターにbox_encode()を使用するように手動で設定する必要があると思いますが(テーブル定義によって暗示されているわけではないため)、asyncpg にそのように指示するにはどうすればよいでしょうか?

4

1 に答える 1