序列上的 nextval 返回 postgresql 表上 typeORM 中所有表行的所有 nextval 值

问题描述 投票:0回答:2

我在 postgreSQL 数据库中有一个序列,当我在 pgAdmin 4 中运行

NEXTVAL(sequence_name)
查询时,它只返回一个正确的值。 然而,当我运行时,在使用 TypeORM 引导的 NestJS 项目中
this.repo.createQueryBuilder().select("NEXTVAL(sequence_name)").execute()
它返回包含生成的所有下一个值的对象数组。

示例:如果表中有 500 行,由于某种原因它将返回 500 个 NEXTVAL 值。

我已尽力在网上寻找解决方案,但没有成功。 有什么想法吗?

postgresql nestjs typeorm nextval
2个回答
0
投票

解决方案相当简单,感谢@nbk 的评论。 这是一个解决方案:

this.repo
      .createQueryBuilder()
      .where('id = (select MAX(id) FROM table_name)')
      .select("nextval('sequence_name")
      .getRawOne();

0
投票

更高效的替代方案,无需在特定表上进行选择:

const [{ id }] = await dataSource.query("SELECT NEXTVAL('users_id_seq') AS id");

const [{ id }] = await userRepository.query("SELECT NEXTVAL('users_id_seq') AS id");

注意: 当使用

select
中的
createQueryBuilder
时,您不仅仅是获取序列中的下一个值,您实际上是将下一个值带到此表(存储库)中选择的每一行,即,它是选择中的一列。

© www.soinside.com 2019 - 2024. All rights reserved.