Postgres:整数超出范围

时间:2016-04-09 05:36:33

标签: sql postgresql

我正在运行以下查询:

WITH match_team_vals(match_id, team_id, is_radiant) AS (
VALUES 
(2281450916, 2783913, true),
(2281450916, 2538753, false)
)

INSERT INTO dota_match_team(match_id, team_id, is_radiant)
SELECT match_id, team_id, is_radiant
FROM match_team_vals
RETURNING id AS lineup_id

在这张桌子上:

CREATE TABLE dota_match_team
(
  id serial NOT NULL,
  match_id integer NOT NULL,
  team_id integer,
  is_radiant boolean NOT NULL,
  CONSTRAINT dota_match_teams_pkey PRIMARY KEY (id)
)

我收到的错误消息是

ERROR: integer out of range
SQL state: 22003

我已经尝试将match_id和team_id强制转换为bigint。同时在线查看我看到人们在串口达到整数上限时遇到了这个问题。情况似乎并非如此:

SELECT nextval('dota_match_team_id_seq')
returns 31

2 个答案:

答案 0 :(得分:10)

考虑更改表格以使用更大的整数(有关详细信息,请参阅此处:http://www.postgresql.org/docs/9.1/static/datatype-numeric.html)。

我认为问题是,您的match_idteam_id类型为integer,并且您尝试插入值2281450916,但整数的最大值为{{1 }}

答案 1 :(得分:0)

您可以运行此查询:

ALTER TABLE dota_match_team alter column match_id type bigint;

此类型转换解决了match_id的错误。如果您认为这是串行限制的错误,那么您也可以这样做。

  SELECT setval('dota_match_team_id_seq' , 100000000);