2009-03-17

PostgreSQL 8.3 版 與舊版之相容性問題排除方法

最近剛好有機會接觸PostgreSQL

一部分的工作是將存在舊版PostgreSQL的資料 porting 至新版

在 porting 的過程當中,發現 PostgreSQL 8.3版針對 implicit type conversion 做了更嚴

所以~ 在舊版 PostgreSQL上面存在的一些default的自動轉型函式(implicit type conversion function)都被移除掉了

當然,過去寫的程式若是比較髒 (例如: 拿 integer 跟 char varing比較、Join)的SQL Statement在新版就會行不通~

比較用功的人~ 當然要藉機好好的review一下 schema的設計是符合理,schema, SQL Statement語句是否要調整~

但,如果影響範圍很大的話,倒是可以自已將新版拿掉的 自動轉型函式再補回去~
這樣 就不用改程式囉 :Q

以下是我在網路上找到,補在新版PostgreSQL的一些function,補上去後 原本的app就可順利執行了:

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;
COMMENT ON FUNCTION pg_catalog.text(integer) IS 'convert integer to text';

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;
COMMENT ON FUNCTION pg_catalog.text(bigint) IS 'convert bigint to text';

沒有留言: