如何从列上具有相等谓词的表中进行选择point
?
需要明确的是:它是原生的 Postgrespoint
数据类型,而不是geometry(point)
来自 PostGIS。
select a.* from indsolv.address As a where a.location = '93.2321, 21.0321';
为上述查询获取此错误:
ERROR: operator does not exist: point = unknown LINE 1: ...ct a.* from indsolv.address As a where a.location = '93.2321... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. SQL state: 42883
还尝试过:
select a.* from indsolv.address As a where a.location = point('93.2321,21.0321');
仍然出现错误。
尽可能尝试,运算符类型解析将找不到合适的运算符并放弃您报告的错误消息。
像在添加的第二次尝试中所做的那样,向正确的参数添加显式类型转换(或
point()
实现相同的函数)只会成功地使错误消息更具启发性:细微的差别可以作为提示:问题不是缺少转换(尽管明确数据类型从来都不是一个坏主意)。问题是实际上没有为数据类型定义相等运算符
=
point
。手册:对于数据类型
point
,根本没有=
。自己看看(在 Postgres 12 中测试):解决方案是改用适当的“相同”运算符
~=
。使用或不使用显式类型转换,在字符串文字中使用或不使用括号,以及您测试的函数符号 - 在这种情况下,使用任一类型的字符串文字以及两个单独的参数,因为有多个重载函数的版本point()
:有关的: