1

ビューを作成すると、エラーが発生しますfunction populate_geometry_columns(unknown) is not unique。私が読んでいる本はこれを使用していましたが、エラーが発生しました。私にとって何がうまくいかなかったのでしょうか?

クエリ:

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
4

2 に答える 2

8

細かいマニュアルから:

あらすじ

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

したがってpopulate_geometry_columns、1 つの引数で呼び出すことができ、どちらも TEXT 引数を持たない 2 つの関数が考えられます。エラー メッセージは、PostgreSQL が暗黙的に'ch03.vw_paris_points'文字列を abooleanまたは anにキャストする必要があるかどうかを認識していないことを示していますoid。私の人間の脳は、バージョンが必要であることを示唆していますoid:

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

しかし、PostgreSQL のソフトウェアの頭脳は、文字列を見て混乱するだけです。おそらく、 の単一の引数形式はpopulate_geometry_columns、あなたが読んでいる本よりも新しいものです。

于 2013-03-29T16:24:42.143 に答える
2

PostgreSQL では、関数のオーバーロードが許可されています。複数の関数に同じ名前を付けることができます。違いはパラメータにあります。

このマニュアルには、PostgreSQL の頭脳がどのように決定を下そうとするか、また、あなたのようなエラー メッセージであきらめる場合について詳しく説明されています。@muはこのケースの詳細をすでに提供しています。

于 2013-03-29T16:27:07.830 に答える