MagicStack / MagicStack/asyncpg

Difference between bulk update with FROM VALUES and without it?

Open
#1,055 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
8.1k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

```python3
await conn.executemany(
"""
UPDATE user SET login=$2, name=$3, age=$4, sex=$5
WHERE id=$1
""",
users,
)
```

```python3
await conn.executemany(
"""
UPDATE user SET login=actual_user.login, name=actual_user.name, age=actual_user.age, sex=actual_user.sex
FROM (VALUES ($1, $2, $3, $4, $5)) AS actual_user (id, login, name, age::integer, sex::integer)
WHERE user.id=actual_user.id
""",
users,
)
```

The first is cleaner. But I worry about performance. I know the second is performed as one request. But the first is the same?

Is there any reason to use the second way?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with asyncpg's executemany entry point and PostgreSQL's UPDATE ... FROM VALUES semantics, comparing both SQL examples and their request behavior. Done would be a clear documented explanation of whether the approaches differ in performance or purpose, and when the second form is useful.

Written by the indexing model from the issue text.

Assessment

Tech stack
postgresql, python
Domain
databases
Issue type
Documentation
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.