将 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;