我想知道,如果在发布更新时数据库中不存在行,是否有办法在更新时返回错误.

update users set email='aa@bb.com' where id=200

如果用户表中没有id=200的用户,postgres只会说"更新0".然而,我想知道我是否能找回一个错误.这样,我就不必向数据库发出两个请求,一个是判断是否存在,一个是更新.如果我们单独进行,那么在判断是否存在和发布更新之间也可能存在竞争条件.

为什么我需要一个错误?简单-因此客户知道他们使用了无效的用户id,并采取纠正措施.

推荐答案

你可以用

update users set email='aa@bb.com' where id=200 returning id;

此查询将返回更新行的id.如果返回0行,则在应用程序中抛出一个错误.

此外,您可能需要判断db驱动程序/框架是否返回受影响行的计数(如JDBC中的getUpdateCount()).

Postgresql相关问答推荐

PostgreSQL数据文件是否仅在判断点期间写入磁盘?

使用PGx在围棋中执行多条SQL语句

PostgreSQL plpgsql函数问题

列不明确

PostgreSQL无效语法

JPA将没有时区的Postgres时间戳调整为服务器时区

我可以使用 SQLAlchemy 映射数据类创建 Postgres `GENERATED ALWAYS AS` 列吗?

合并两个字典并创建一个包含更新凭据的字典列表

Postgres 低估了导致错误查询计划的行数

如何包装 record_out() 函数?

我可以在 Ruby on Rails 上编写 PostgreSQL 函数吗?

全文搜索(Postgres)与Elastic search

是否有 postgres CLOSEST 运算符?

冲突中的 Postgres 会更新复合主键

?(问号)运算符在 Rails 中查询 Postgresql JSONB 类型

如何判断每个组中是否存在值

如何禁用 postgresql缓存优化?

设置 Phoenix 框架和 Ecto 以使用 UUID:如何插入生成的值?

如何获取一个月的天数?

postgresql 删除级联