誤解を解く
まず第一に、これは型キャストなしでそのまま動作するはずです。PostgreSQL 9.1、9.2、および8.4.15でテストしました。以前のポイント リリースを実行している必要があります。または、その他の誤解 ( wrong などsearch_path
) があります。あなたの情報は誤解を招くものです。
アドホック コールを除き、あいまいさを解消するために、明示的な型キャストを常に追加する必要があります。PostgreSQL では、関数のオーバーロードが許可されています。署名を使用して別の関数を作成する必要がある場合:
CREATE FUNCTION updateGeo2(text, numeric, numeric) RETURNS text AS $$ ..
numeric
...数値リテラルのデフォルトの型により、他のものよりも優先されます。既存のコードが壊れる可能性があります。
一方、関数を追加すると、次のようになります。
CREATE FUNCTION updateGeo2(char(5), numeric, numeric) RETURNS text AS $$ ..
その後、Postgres は何をすべきかわからなくなり、例外をスローします。
エラー: 関数 updategeo2(不明、数値、数値) は一意ではありません
適切な構文
SELECT updateGeo2('area', '40.88'::float4, '-90.56'::float4);
または、標準 SQL でより詳細に:
SELECT updateGeo2('area', cast('40.88' AS float4), cast('-90.56' AS float4));
または、単一引用符 (およびコロン) を本当に避けたい場合は、次のようにします。
SELECT updateGeo2('area', float4 '40.88', float4 '-90.56');
このようにして、数値リテラルをデータ型float4
(= real
) に直接キャストします。型キャスト
の
詳細については、マニュアルを参照してください。
(40.88)::float4
も機能しますが、微妙に効果が低くなります。まず、40.88
は型numeric
(ドットを含むこの数値リテラルの既定の型) であると見なされます。次に、値が にキャストされfloat4
ます。2 つの型キャストを行います。
数値定数の詳細については、マニュアルを参照してください。