2013-03-29 48 views
1

创建视图时,出现错误function populate_geometry_columns(unknown) is not unique。我正在阅读的一本书使用了这个,但它给了我一个错误。我有什么可能出错的?PostGIS错误:无法选择最佳候选功能

查询:

CREATE OR REPLACE VIEW ch03.vw_paris_points AS 
SELECT gid, osm_id, ar_num, geom, 
tags->'name' As place_name, 
tags->'tourism' As tourist_attraction 
FROM ch03.paris_hetero 
WHERE ST_GeometryType(geom) = 'ST_Point'; 

SELECT populate_geometry_columns('ch03.vw_paris_points'); 

错误:

ERROR: function populate_geometry_columns(unknown) is not unique 
LINE 1: SELECT populate_geometry_columns('ch03.vw_paris_points'); 
      ^
HINT: Could not choose a best candidate function. You might need to add explicit type casts. 

********** Error ********** 

ERROR: function populate_geometry_columns(unknown) is not unique 
SQL state: 42725 
Hint: Could not choose a best candidate function. You might need to add explicit type casts. 
Character: 8 

回答

8

fine manual

Synopsis

text Populate_Geometry_Columns(boolean use_typmod=true); 
int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true); 

因此,有两种可能的populate_geometry_columns函数可以用一个参数调用,并且都没有TEXT参数。错误消息告诉你PostgreSQL不知道它是否应该隐式地将你的'ch03.vw_paris_points'字符串转换为booleanoid。我的大脑会暗示你想要的oid版本:

SELECT populate_geometry_columns('ch03.vw_paris_points'::regclass); 
-- add an explicit cast -------------------------------^^^^^^^^^^ 

但PostgreSQL的软件大脑只看到一个字符串,就会犯糊涂。也许populate_geometry_columns的单一参数形式比你正在阅读的书更新。

2

PostgreSQL允许function overloading。多个功能可以具有相同的名称。差别在于参数。

该手册详细介绍了PostgreSQL的大脑如何决定以及何时放弃类似于您的错误消息。 @mu已经提供了这种情况的详细信息。