我有employees
table
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';
对我来说不是解决方案,因为它仅适用于特定会话。此外,如果解决方案根本不依赖于服务器的本地时区,那将会很棒
提前致谢
答案 0 :(得分:1)
时区是会话参数。设置会话的TIMEZONE相对简单。另请参阅:postgres default timezone
SET TIMEZONE TO 'GMT';
会做到这一点。
编辑:我想你可以试试AT TIMEZONE 'GMT';
,但我不确定两者之间的区别。
编辑2:正如Craig Ringer所说,以下似乎是您正在寻找的。 p>
ALTER DATABASE ...
设置它的数据库级别。如果你改变它postgresql.conf
它是全球性的。有关详细信息,请参阅手册。
答案 1 :(得分:1)
日期,时间和时间戳在SQL中非常笨拙。
我怀疑在这种情况下你要写的是:
TIMESTAMP 'blah blha blah' AT TIME ZONE 'UTC'
这将定义一个本地时间戳(不受转换),然后在UTC时间明确将其视为时间戳。