小编Pie*_*che的帖子

PostgreSQL 在没有 jsonb_set 的情况下更新 JSONB

使用普通的更新语句来更新 json(b) 列是否有任何缺点,如下所示:

update "events" set "properties" = '{"type":"graph"}'
Run Code Online (Sandbox Code Playgroud)

而不是使用 PostgreSQL 提供的 jsonb_set 函数,它会变成这样的语句:

update "events" set jsonb_set("properties", {'type'}, 'graph')
Run Code Online (Sandbox Code Playgroud)

当使用例如。一个 ORM,并在刚刚更新了 JSON 字段的模型上调用 .save(),第一个方法将被调用,但是由于 PostgreSQL 文档中没有提到这种做事方式,我担心这个可能有一些缺点。

鉴于我对数据库性能方面的任何事情都不太熟悉,我想我会来这里问一个问题。

提前致谢!

postgresql performance json postgresql-performance

7
推荐指数
1
解决办法
2万
查看次数

关于 INSERT 并发到具有复合主键的表的最佳实践?

说我有表usersteamsteams_users结表(team_IDuser_ID/复合PK)。如果我想将用户添加到团队中,那么在性能/并发问题方面,最佳选择是什么?

选项1)

首先查询表并查看关系是否已经存在,如果它只是通知发出请求的用户。

选项 2)

插入时,使用WHERE EXISTS语法(第二个示例)。

选项 3)

将 Postgres 9.5 Beta 用于 UPSERT 功能。(我想在学校项目中使用 Beta 版本不是一个坏主意吗?)。

在并发方面,哪种选择最好。我对 SQL 不是很有经验(只是 CRUD 应用程序的标准内容)。但据我所知,在第一个选项中,另一个用户可以在查询联结表之后但在自己实际插入关系之前插入关系。我想不会有任何重复项,因为我在该联结表中有一个复合主键,但我觉得让它成为例外并继续是不好的做法。此外,在我当前的代码中,在这种情况下我会返回 500 http 状态(因为 db 异常),这似乎并不正确。

我读过我可以通过“锁定”数据库/表来部分解决上述问题,但我不知道这是否是正确的方法。

最后,我不知道第二个选项是否存在竞争条件。

postgresql concurrency locking relational-theory

5
推荐指数
1
解决办法
2104
查看次数