我在postgreSQL 8.2的分叉MPP版本上尝试一个非常简单的测试查询,我试图弄清楚这是否是预期的行为。
当我使用current_date为单行执行insert语句时,我得到当前日期的预期输出:
create table test( t_date timestamp without time zone);
insert into test( t_date)
VALUES
(
current_date::date
),
db=> select * from test ;
t_date
---------------------
2013-08-19 00:00:00
(1 row)
但是当我在insert语句中添加多行时,我得到了一个意想不到的结果 - 这是标准的一部分吗?
insert into test( t_date)
VALUES
(
current_date::date
),
(
current_date::date
);
db=> select * from test ;
t_date
---------------------
1999-12-31 00:00:00
1999-12-31 00:00:00
(2 rows)
我的问题是:当我使用current_date :: date时,为什么第一个insert语句输出正确的日期?当我使用相同的current_date :: date cast时,为什么第二个insert会输出两个不正确的日期?
答案 0 :(得分:2)
结果不正确,出乎意料,而且奇怪。
PostgreSQL 9.2.4产生正确的结果。
regress=> select * from test;
t_date
---------------------
2013-08-20 00:00:00
2013-08-20 00:00:00
(2 rows)
as does 8.3, the oldest version I can be bothered testing
无论你正在使用的PostgreSQL的修补/黑客攻击版本都引入了一个错误。
答案 1 :(得分:0)
是的,这是Postgresql允许"批量"的一个功能。使用VALUES子句加载。 http://www.postgresql.org/docs/8.2/static/sql-insert.html
请参阅以下部分:
使用multirow VALUES语法插入多行: