将 bigint 值插入 int 列类型 Postgresql
Insert bigint value into int column type Postgresql
我需要将一些数据从一个 table 插入到 Postgresql 中的另一个。 table 我需要填充数据的架构如下所示:
create table public.test_int_table(
id int,
description text,
hash_code int
);
问题是另一个 table 中的 id 列是 bigint 类型。因此,当我尝试将咬合数据插入 int 列时,出现异常:
insert into public.test_int_table
select * from public.test_table
SQL Error [22003]: ERROR: integer out of range
如何trim 用于在 Postgresql 中插入的 bigint 数据?通常的转换运算符似乎只适用于向上转换(从 int 到 bigint,而不是其他方式)。
它不是一个不断增加的值,并且在大多数情况下它适合 int 所以我真的不关心这里失去精度。
这可能非常危险,因为您可能会得到重复的。但是您可以使用直接比较,然后处理太大的值。以下 "trims" 他们 NULL
:
insert into public.test_int_table (id, description, hash_code)
select (case when id < 2^31 - 1 then id::int end) as id,
description, hash_code
from public.test_table;
请注意,这可能会完全弄乱数据。如果可以更改值,则可以替换为新值:
insert into public.test_int_table (id, description, hash_code)
select dense_rank() over (order by id),
description, hash_code
from public.test_table;
我需要将一些数据从一个 table 插入到 Postgresql 中的另一个。 table 我需要填充数据的架构如下所示:
create table public.test_int_table(
id int,
description text,
hash_code int
);
问题是另一个 table 中的 id 列是 bigint 类型。因此,当我尝试将咬合数据插入 int 列时,出现异常:
insert into public.test_int_table
select * from public.test_table
SQL Error [22003]: ERROR: integer out of range
如何trim 用于在 Postgresql 中插入的 bigint 数据?通常的转换运算符似乎只适用于向上转换(从 int 到 bigint,而不是其他方式)。 它不是一个不断增加的值,并且在大多数情况下它适合 int 所以我真的不关心这里失去精度。
这可能非常危险,因为您可能会得到重复的。但是您可以使用直接比较,然后处理太大的值。以下 "trims" 他们 NULL
:
insert into public.test_int_table (id, description, hash_code)
select (case when id < 2^31 - 1 then id::int end) as id,
description, hash_code
from public.test_table;
请注意,这可能会完全弄乱数据。如果可以更改值,则可以替换为新值:
insert into public.test_int_table (id, description, hash_code)
select dense_rank() over (order by id),
description, hash_code
from public.test_table;