1

Funambol 在其管理文档中规定要在较新的 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 术语中)我还有其他模式由于这些强制转换而导致应用程序中断(带有“运算符不是唯一的:未知 || 整数”和提示“无法选择最佳候选运算符。你可能需要添加显式类型转换。”),而他们之前工作。

因此,一种解决方案当然是定义额外的数据库并在其中只包含 Funambol。但我想知道是否有办法定义这些强制转换,以便它们只在 Funambol 的模式中而不是在整个数据库中生效。

4

1 回答 1

0

不,这不可能以你想象的方式。类型转换由源类型和目标类型标识,因此如果这两种类型都是内置类型之一,则数据库的所有用户将看到它们之间的相同类型转换。沿着这条线的唯一解决方法是创建内置数据类型的克隆,但不要去那里。;-)

因此,您要么需要使用 Funambol 寻求修复,要么将您的应用程序分离到不同的数据库中,并可能使用 dblink 之类的东西将它们重新链接在一起。

于 2011-01-24T21:19:03.143 回答