2014年4月17日木曜日

PostgreSQL8.2から9.3への移行

稼働中のシステムの検証機を用意することになった。
システムは数年前に開発されたWebのシステム。
全く同じ環境にすれば良いのだが、都合によりそうも行かず。
Windows2003からWindows7とOSから違う。
Windows7で動くことを条件にすると、APサーバなどメジャーバージョンから変わってしまった。


苦労したのが、PostgreSQL8.2から9.3の移行である。
ダンプからのリストアは問題なかったが、システムを動かすと所々でエラーが発生する。
8.2と9.3で色々と扱いが違うようだ。
システムはパッケージで導入し改修はできない。
以下のサイト参考にして(というか切り貼りして)対応した



-- 演算子||追加
CREATE FUNCTION textint4cat(text, int4) RETURNS text
   AS 'SELECT $1 || $2::pg_catalog.text' LANGUAGE sql IMMUTABLE STRICT;
CREATE OPERATOR || (PROCEDURE = textint4cat, LEFTARG = text, RIGHTARG = int4);

-- CASTの追加
CREATE CAST (int4 AS text) WITH INOUT AS IMPLICIT;
CREATE CAST (numeric AS character) WITH INOUT AS IMPLICIT;
CREATE CAST (timestamp without time zone AS text) WITH INOUT AS IMPLICIT;
CREATE CAST (character varying AS numeric) WITH INOUT AS IMPLICIT;
CREATE CAST (timestamp without time zone AS character varying) WITH INOUT AS IMPLICIT;
CREATE CAST (character varying AS timestamp without time zone) WITH INOUT AS IMPLICIT;
CREATE CAST (timestamp with time zone AS text) WITH INOUT AS IMPLICIT;

さらに postgresql.conf の standard_conforming_strings = off へ


これでどうにか動くようになった。