在 Windows 上使用 PostgreSQL 11。
两者都由 安装cube
和earthdistance
验证pg_available_extensions
。
重新启动 PostgreSQL。
[42883] ERROR: operator does not exist: point <@> point.
设置:
CREATE EXTENSION IF NOT EXISTS cube SCHEMA temp;
CREATE EXTENSION IF NOT EXISTS earthdistance SCHEMA temp;
create table temp.lat_lon (
city varchar(50) primary key,
lat float8 not null,
lon float8 not null
);
insert into temp.lat_lon values
('London, GB', 51.67234320, 0.14787970),
('New York, NY', 40.91524130, -73.7002720);
select
(
(select point(lon,lat) from temp.lat_lon where city = 'London, GB') <@>
(select point(lon,lat) from temp.lat_lon where city = 'New York, NY')
) as distance_miles;
抛出:
[42883] ERROR: operator does not exist: point <@> point.
已安装扩展并重新启动 Postgres。
select * from pg_available_extensions where name IN ('cube', 'earthdistance');
cube 1.4 data type for multidimensional cubes
earthdistance 1.1 calculate great-circle distances on the surface of the Earth
这是因为 Windows 上的 PostgreSQL v11 吗?是的,纬度/经度以正确的顺序排列(长在第一位)。
关于以下方面的更新:架构/搜索路径:
SELECT extname, extnamespace::regnamespace FROM pg_extension
WHERE extname IN ('cube', 'earthdistance');
cube temp
earthdistance temp
SHOW search_path;
temp
注:I CREATE EXTENSION hstore SCHMEA temp;
and can usehstore
及其运算符。所以似乎并不是所有的扩展。
可能的解释:您将扩展安装在当前
search_path
.诊断:
您当前的扩展架构是
search_path
什么?如果没有,有你的解释。安装到不同的架构或调整您的search_path
.和:
有关的: