将强制转换范围仅限于PostgreSQL中的模式

时间:2011-01-20 07:26:09

标签: postgresql funambol

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的架构中生效,而不是在整个数据库中生效。

1 个答案:

答案 0 :(得分:0)

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

因此,您需要使用Funambol寻求修复,或者将您的应用程序分离到不同的数据库中,并且可能将它们与dblink等链接在一起。