Postgres更新将11替换为-1

时间:2018-03-02 18:48:56

标签: sql postgresql sql-update

这是一个非常奇怪的,我正在尝试更新postgres表中的一行。我可以将它更新为我喜欢的任何值,除了-1(减1)。

这是我正在使用的更新声明......

UPDATE flight 
SET turns = -1
WHERE (firstTime >= '24-Feb-2018 00:00:00' 
AND lastTime <= '24-Feb-2018 23:59:00') 
AND device = '3ECC38' 

这是我用来检查结果的SELECT语句....

SELECT *
FROM flight 
WHERE  (firstTime >= '24-Feb-2018 00:00:00' AND lastTime <= '24-Feb-
2018 23:59:00' )
AND device = '3ECC38' 

我可以编辑UPDATE查询以将'turns'设置为我喜欢的任何数字(正面或负面),SELECT语句指示UPDATE正常工作。唯一的例外是当我设置'turns = -1'时,我运行select语句,它显示turn已设置为11(11)。 该表上的错误是一致的,但我无法在任何类似的表上复制。 有一些奇怪的行为与此错误相关,例如我可以将'turns'设置为-2,如果我尝试将其递增1(SET turns = turns + 1),那么它的值变为11,而不是-1。

似乎有一种方法可以将'turn'设置为-1。我首先设置一些其他可接受的值(“SET turns = 2”)然后我可以通过“SET turns =”将其设置为-1 -1' :: INTEGER“

  • 版本是“x86_64-pc-mingw64上的PostgreSQL 9.5.7,由...编译 gcc.exe(Rev5,由MSYS2项目构建)4.9.2,64位“
  • 我正在使用pgAdmin3(版本1.23.0b)
  • 运行查询
  • UPDATE永远不会返回错误,它只是说“查询成功返回:一行受影响”
  • 只有一行与选择criterea匹配。

该表是使用此创建的....

CREATE TABLE public.flight
(
  flightid SERIAL,
  firstime timestamp without time zone,
  lasttime timestamp without time zone,
  deviceid character(6),
  fixcount integer,
  turns integer DEFAULT '-1'::integer
)

CREATE INDEX flight_idx_001
  ON public.flight
  USING btree
  (deviceid COLLATE pg_catalog."default");

桌子上没有触发器。

我实际运行的DDL创建表默认为此....

turns           INTEGER DEFAULT -1

pgAdmin3已将其更改为上面列出的

我从C#应用程序和PSQL控制台运行查询 - 结果是一样的。

我注意到另一个可能相关的“特征”。如果我将一个字段定义为一个整数并指定一个正的默认值,那么可以毫无困难地接受它,但是如果我指定一个负整数值,那么默认值将被修改为一个强制转换为整数的字符串。

0 个答案:

没有答案