2011-01-20 5 views
1

Funambolの中で唯一のスキーマにスコープをキャストタイプと、より厳格であり、キャスト新しいPostgreSQLのインスタンス上で実行するためにあなたがそれらのキャスト追加することが必要であることがあります。リミットは、その管理マニュアルにPostgreSQLの

CREATE FUNCTION pg_catalog.text(bigint) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int8out($1));'; 
CREATE CAST (bigint AS text) WITH FUNCTION pg_catalog.text(bigint) AS IMPLICIT; 
CREATE FUNCTION pg_catalog.text(integer) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int4out($1));'; 
CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT; 

問題はということですが同じデータベース(PostgreSQLの用語で)には、これらのキャストのためにアプリケーションが壊れた他のスキーマもあります(「演算子は一意ではありません:未知数||整数」とヒント「最適な候補演算子を選択できませんでした。明示的な型キャスト ")。

したがって、1つの解決策はもちろん追加のデータベースを定義し、そこにFunambolだけを持たせることです。しかし、これらのキャストをFunambolのスキーマでのみ有効にし、データベース全体では有効にならないように、キャストを定義する方法があるかどうかは疑問です。

+4

ベストソリューションは、暗黙的なキャストに依存する(壊れた)アプリケーションを修正することです(ほとんど常に悪いことです)。しかし、それはあなたが聞きたい解決策ではありません;) –

+0

私は同意します。狂ったことは、彼らは管理のマニュアル/文書で、そのようなキャストをソリューションとして追加しなければならないと書いてあることです。だから問題はよく知られています。ドキュメントのバグ修正。私の新しいパラダイム。 ;-) – Mitar

答えて

0

いいえ、それはあなたがそれを想像する方法では不可能です。キャストはソースとターゲットの型によって識別されるため、両方の型がビルトイン型のいずれかである場合、データベースのすべてのユーザーには同じキャストが表示されます。その行に沿った唯一の回避策は、組み込みのデータ型のクローンを作成することですが、そこには行かないでください。 ;-)

あなたはFunambolで修正を探すか、アプリケーションを別のデータベースに分けて、おそらくdblinkのようなものにリンクし直す必要があります。

+0

はい、私はこれをしました。 Funambolを別のデータベースに移動しました。幸運にも(今のところ)それは分離されているかどうかは関係ありません。しかし、それは間違いなくすてきで清潔な解決策ではありません。 – Mitar

関連する問題