sql - 有没有一种惯用的方法来更新 PostgreSQL 中的某些字段?
问题描述
有没有什么好的方法可以UPDATE
请求包含可选数据?我现在拥有的是:
- 一个例子
Author
{
"id": "203ede72-45af-4029-8055-e1c43656d42d",
"first_name": "Willdon",
"last_name": "Surgey"
},
- postgres函数更新作者
-- UPDATE
create or replace
function update_author(target_id uuid, i_first_name varchar(50), i_last_name varchar(50))
returns json
language plpgsql
as
$$
declare inserted_author authors%rowtype;
begin
update authors a
set first_name = i_first_name,
last_name = i_last_name
where a.id = target_id
returning * into inserted_author;
return row_to_json(inserted_author);
end;
$$;
现在,如果我在with bodyPUT
处提出请求/author/203ede72-45af-4029-8055-e1c43656d42d
{
"last_name": "Smith"
}
它成为了
{
"id": "203ede72-45af-4029-8055-e1c43656d42d",
"first_name": "",
"last_name": "Smith"
}
first_name
如果仅last_name
提供,我希望它保留
解决方案
我最终做的是我最初author
从数据库中查询了完整的对象,然后使用golang
'sUnmarshal
来选择性地更改属性,然后将完整的数据传递给 postgres 函数。
注意:如果您使用此解决方法,请务必进行某种验证,以便您的用户无法使用类似的查询破坏您的数据库
PUT /author/f3ef41a5-fe1e-4180-92bf-8b87e879211d
{
"id": "g3ef41a5-fe1e-4180-92bf-8b87e879211d",
"last_name": "Smith"
}
请注意,UUID 的第一个字母已更改,这可能会破坏内容。
推荐阅读
- visual-studio - VS2015 中的 XAML 设计器问题
- java - 从java中的Json Object中获取一个值
- php - Laravel 循环遍历一组输入数组
- java - 如何使用响应格式的改造因参数而异?
- sage - Sage:3D 绘图 - 纵横比
- javascript - 你能做一个允许你输入文本但不允许你删除文本的文本输入吗?
- python - Scrapy:所有请求都出现 403 错误
- java - 如何从arrayList中删除唯一元素
- c# - 如何在从 SQL Server 数据库获取数据的 DataGridView 中显示货币符号?
- php - 与 Google App Engine 上的 Cloud SQL 的 PHP (PDO) 连接不起作用