45 lines
1.2 KiB
Markdown
45 lines
1.2 KiB
Markdown
|
|
|
||
|
|
LOCK statement obtains a table-level lock, waiting if necessary for any conflicting locks to be released.
|
||
|
|
More about LOCK statement in PostgreSQL: https://www.postgresql.org/docs/11/sql-lock.html
|
||
|
|
|
||
|
|
Following clauses are supported:
|
||
|
|
- IN(mode) - mode specifies which locks this lock conflicts with.
|
||
|
|
Mode can be:
|
||
|
|
- jet.LOCK_ACCESS_SHARE
|
||
|
|
- jet.LOCK_ROW_SHARE
|
||
|
|
- jet.LOCK_ROW_EXCLUSIVE
|
||
|
|
- jet.LOCK_SHARE_UPDATE_EXCLUSIVE
|
||
|
|
- jet.LOCK_SHARE
|
||
|
|
- jet.LOCK_SHARE_ROW_EXCLUSIVE
|
||
|
|
- jet.LOCK_EXCLUSIVE
|
||
|
|
- jet.LOCK_ACCESS_EXCLUSIVE
|
||
|
|
- NOWAIT() - locked table should not wait for any conflicting locks to be released. If the specified lock(s)
|
||
|
|
cannot be acquired immediately without waiting, the transaction is aborted.
|
||
|
|
|
||
|
|
## Example
|
||
|
|
|
||
|
|
|
||
|
|
```
|
||
|
|
lockStmt := Address.
|
||
|
|
LOCK().
|
||
|
|
IN(jet.LOCK_ACCESS_SHARE).
|
||
|
|
NOWAIT()
|
||
|
|
```
|
||
|
|
|
||
|
|
Debug SQL of above statement:
|
||
|
|
|
||
|
|
```sql
|
||
|
|
LOCK TABLE dvds.address IN ACCESS SHARE MODE NOWAIT;
|
||
|
|
```
|
||
|
|
|
||
|
|
### Execute statement
|
||
|
|
|
||
|
|
To execute update statement and get sql.Result:
|
||
|
|
|
||
|
|
```
|
||
|
|
res, err := lockStmt.Exec(db)
|
||
|
|
```
|
||
|
|
|
||
|
|
Use `ExecContext` to provide context object to execution.
|
||
|
|
|
||
|
|
|