最近剛學PostgreSQL用的是系統內安裝的7.2版, 玩了一陣子後覺得在網上找到的資訊
有滿多是講8.x版的, 所以便把版本換成了8.0版, 可是換新版本後之前舊版能用的拿到新
版就不能用了, 剛碰到的是plpgsql的問題
先建立handler
CREATE FUNCTION "plpgsql_call_handler" () RETURNS opaque AS '/usr/lib/plpgsql.so', 'plpgsql_call_handler' LANGUAGE 'C';
再建立plpgsql語言
CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER "plpgsql_call_handler" LANCOMPILER 'PL/pgSQL';
會出現訊息
WARNING: changing return type of function plpgsql_call_handler from "opaque" to "language_handler"
可是有建立成功
再來建立function
CREATE FUNCTION "functest" () RETURNS text AS '
DECLARE
curtime datetime;
BEGIN
curtime := ''now'';
RETURN curtime;
END;
' LANGUAGE 'plpgsql';
也有建立成功, 不過在執行 select functest(); 時就會出現錯誤訊息
ERROR: type "datetime" does not exist
CONTEXT: compile of PL/pgSQL function "functest" near line 2
不過這在7.2版時使用都很正常, 沒出現任何錯誤訊息, 為何換到新版就不能用了
是在語法上有哪邊要改嗎? 若是語法上有差異那從舊版上dump下來的資料還原
到新版上不就會出現問題?