Ограничить область применения только схемой в PostgreSQL
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 ответ
Нет, это не так, как вы себе это представляете. Приведения идентифицируются по типу источника и цели, поэтому, если оба типа являются одним из встроенных типов, все пользователи базы данных будут видеть одинаковые приведения между ними. Единственный обходной путь в этом направлении - создание клонов встроенных типов данных, но не переходите туда.;-)
Поэтому вам нужно либо искать исправление с помощью Funambol, либо разделять ваши приложения на разные базы данных, и, возможно, связать их вместе с чем-то вроде dblink.