Ограничить область применения только схемой в PostgreSQL - PullRequest
1 голос
/ 20 января 2011

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.Но мне интересно, есть ли способ определить эти приведения так, чтобы они действовали только в схеме Фунамбола, а не во всей базе данных.

1 Ответ

0 голосов
/ 25 января 2011

Нет, это не так, как вы себе это представляете.Приведения идентифицируются по типу источника и цели, поэтому, если оба типа являются одним из встроенных типов, все пользователи базы данных будут видеть одинаковые приведения между ними.Единственный обходной путь в этом направлении - создание клонов встроенных типов данных, но не идите туда.; -)

Таким образом, вам нужно либо найти исправление с помощью Funambol, либо разделить ваши приложения на разные базы данных и, возможно, связать их вместе чем-то вроде dblink.

...