2011-01-20 1 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 용어로)에서 나는 ("연산자가 유일하지 않다 : 알 수없는 || 정수"와 힌트 "최상의 후보 연산자를 선택할 수 없다."라는 이유로 이러한 캐스트 때문에 응용 프로그램이 파손 된 다른 스키마가 있습니다. 명시 적 형식 캐스트 ").

그래서 하나의 솔루션은 물론 추가 데이터베이스를 정의하고 거기에 Funambol 만 있습니다. 그러나 나는 그들이 Funambol의 스키마에서만 효과를 발휘할 수 있도록 해당 캐스트를 정의하는 방법이 있는지 궁금합니다. 전체 데이터베이스가 아닙니다.

+4

가장 좋은 해결책은 암시 적 캐스팅 (거의 항상 나쁜 것)에 의존하는 (깨진) 응용 프로그램을 수정하는 것입니다. 그러나 그것은 듣고 싶은 해결책이 아니라 obivously입니다.) –

+0

동의합니다. 미친 일은 관리자가 솔루션 설명서에 그러한 캐스트를 추가해야한다는 문서/문서를 가지고 있다는 것입니다. 그래서 문제는 잘 알려져 있습니다. 문서로 버그 수정. 나를위한 새로운 패러다임. ;-) – Mitar

답변

0

아니요, 상상할 수 없습니다. 형변환은 소스 및 대상 유형으로 식별되므로 두 유형 모두 내장 유형 중 하나 인 경우 데이터베이스의 모든 사용자는 두 유형 사이에 동일한 형변환을 보게됩니다. 이 줄을 따라 해결할 수있는 유일한 방법은 기본 제공 데이터 형식의 복제본을 만드는 것이지만 거기에 가지 마세요. ;-)

그래서 Funambol을 사용하여 수정 프로그램을 찾거나 응용 프로그램을 다른 데이터베이스로 분리하고 dblink와 같이 다시 링크해야합니다.

+0

예,이 작업을 수행했습니다. Funambol을 데이터베이스 분리. 다행히도 (당장은) 격리되어 있으면 상관 없습니다. 그러나 그것은 확실히 좋고 깨끗한 해결책은 아닙니다. – Mitar