我对employees
表有如下定义
CREATE TABLE employees
(
id integer NOT NULL,
name text,
withouttz timestamp without time zone,
withtz timestamp with time zone,
CONSTRAINT primarykey_emp PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE employees
OWNER TO chris;
我以如下方式插入了两条记录:
INSERT INTO employees(
id, name, withouttz, withtz)
VALUES (1, 'test', '2011-01-01 00:00:00', '2011-01-01 12:00:00+03');
INSERT INTO employees(
id, name, withouttz, withtz)
VALUES (2, 'test', '2011-01-01 00:00:00', '2011-01-01 12:00:00');
我为select * from employees
写了一个简单的java类,输出如下:
col1: 1
col2: test
col3: 2011-01-01 00:00:00
col4: 2011-01-01 07:00:00-8:00
col1: 2
col2: test
col3: 2011-01-01 00:00:00
col4: 2011-01-01 12:00:00-8:00
问题:是否有一种方法来创建一个postgres表的timestamp with time zone
,使它认为时区是UTC而不是服务器的本地时区?
注意:set timezone TO 'GMT';
对我来说不是一个解决方案,因为它只在一个特定的会话中工作。此外,如果解决方案完全不依赖于服务器的本地时区,那就太好了
Thanks in advance
日期、时间和时间戳在SQL中是相当笨拙的。
我猜在这种情况下你想写的是:
TIMESTAMP 'blah blha blah' AT TIME ZONE 'UTC'
这将定义一个本地时间戳(不受转换影响),然后显式地将其视为UTC时间的时间戳。
时区是会话参数。设置会话的TIMEZONE相对简单。参见:postgres default timezone
SET TIMEZONE TO 'GMT';
就可以了。
编辑:我想你可以试试AT TIMEZONE 'GMT';
,但我不确定两者之间的区别。
EDIT 2:正如Craig Ringer所说,以下内容似乎是您正在寻找的。
ALTER DATABASE ...
设置数据库级别。如果你把它换进去postgresql.conf
它是全局的。