2013-03-29 72 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已經提供了這種情況的詳細信息。