postgresql 下的now()返回的时间是服务器时间,这个时间是对的。但是装了orafce后的sysdate()就不对,差了一个“服务器时区”,为了这个把服务器时区也改成0时区不合适,于是改改函数吧。。。
set search_path="$user", oracle, madlib, public;
反正那个原来也是个函数。从需要使用的用户下面新建这个函数。。。。加上时区。。。。 。。
这个解决办法也不是特别的理想,但是基本上可以解决这个问题了
DROP FUNCTION sysdate()
CREATE OR REPLACE FUNCTION public.sysdate( )
RETURNS timestamp with time zone
LANGUAGE 'sql'
COST 100
IMMUTABLE STRICT
AS $BODY$ SELECT oracle.sysdate() at time zone '0'; $BODY$;
或者从参数里调整orafce的时区为 -8 (orafce 3.15 可以)
更加优雅的解决方案:
如果要进行持久更改,请在 postgresql.conf 中写入 orafce.timezone = 'Asia/Shanghai' 并重新启动postgresql
选择 oracle.dbtimezone() 必须显示 'Asia/Shanghai' 或 ALTER DATABASE xxx SET orafce.timezone = Asia/Shanghai';并重新启动postgresql
不需要重新安装orafce。只是您需要正确且持久地设置 orafce.timezone() 的值