Multiple PostgreSQL workers can claim different jobs concurrently by selecting eligible rows with FOR UPDATE SKIP LOCKED, changing those rows to a claimed state in the same short transaction, and committing. The row locks prevent competing claim transactions from taking the same rows while the transaction is open; the committed status change records the claim after the locks are released.
What row locking does in PostgreSQL
A SELECT ... FOR UPDATE locks the selected rows as though they were selected for update. Other transactions that try to update, delete, or take a conflicting row lock on those rows generally wait until the locking transaction ends. If a waiting locking query proceeds after a competing update, it locks and returns the updated row if it still exists; if that row was deleted, it may return no row. PostgreSQL normally holds row locks until transaction end, though rolling back to a relevant savepoint can release locks acquired after that savepoint. See the PostgreSQL 16 SELECT documentation.
Row locks coordinate writers and other lockers; ordinary reads are not blocked by them. PostgreSQL offers four row-locking clauses, with different strengths and conflict behavior:
| Clause | Practical role |
|---|---|
FOR UPDATE |
Strongest of these four row-lock modes; a straightforward choice when a queue claim will update a job’s status. |
FOR NO KEY UPDATE |
Weaker than FOR UPDATE; consider it when the operation does not need the stronger protection. |
FOR SHARE |
Shared row lock with narrower conflict behavior. |
FOR KEY SHARE |
Shared row lock with narrower conflict behavior, including protection relevant to key changes. |
These clauses are not interchangeable. Choose the least restrictive mode that still protects the operation’s invariants; for a simple claim that changes status, FOR UPDATE is easy to reason about. The locking documentation describes the exact conflicts for each mode.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
How workers avoid claiming the same job
By default, a locking query can wait when another transaction already holds a conflicting lock. NOWAIT changes that behavior to an immediate error; SKIP LOCKED instead omits rows that cannot be locked immediately. A second worker can therefore move on to other eligible jobs rather than wait on the first worker’s claim.
PostgreSQL explicitly identifies queue-like consumers as a useful case for SKIP LOCKED, while warning that it “provides an inconsistent view of the data” and is not suitable for general-purpose reads. The worker is deliberately seeing an available subset, not a complete, consistent snapshot of all pending work. These options affect row-lock behavior; PostgreSQL still takes the required table-level lock. See the PostgreSQL 16 SELECT documentation.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Use one short transaction to select and record a claim
A row lock exists only while its transaction remains open. If the worker needs other transactions to see that a job has been claimed after commit, it must persist a state change as part of the claim transaction. A common shape is to select a bounded set of pending rows in the desired order, lock them with FOR UPDATE SKIP LOCKED, update their status, and return the claimed rows.
BEGIN;
WITH picked AS (
SELECT id
FROM jobs
WHERE status = 'pending'
ORDER BY priority DESC, created_at, id
LIMIT 10
FOR UPDATE SKIP LOCKED
)
UPDATE jobs AS j
SET status = 'running'
FROM picked
WHERE j.id = picked.id
RETURNING j.*;
COMMIT;
This is an illustrative pattern, not a complete queue implementation. Adapt the table and column names, ordering policy, batch size, and SQL to your schema and PostgreSQL release. The official locking documentation explains the lock semantics, not every production queue concern.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
- Keep the transaction limited to selecting, locking, and recording the claim.
- Commit before calling external services or doing lengthy job work, so claim locks are not held throughout processing.
- Make the status transition and selection atomic: if the transaction fails before commit, its claim update does not become a committed claim.
- After commit, use an explicit recovery design—such as a lease or timeout—if jobs must be reclaimed after a worker crashes. Transaction-scoped row locks do not themselves define crash recovery.
Ordering, priority, and fairness
SQL does not promise a predictable row order without ORDER BY. Use a stable tie-breaker, typically a unique identifier, so equal priority or timestamp values have a defined order. For example, ORDER BY created_at, id expresses oldest-first intent, while ORDER BY priority DESC, created_at, id puts priority ahead of age.
SKIP LOCKED favors progress over strict queue order: a worker can bypass a locked row and claim a later one. A frequently locked high-priority job can consequently be bypassed repeatedly. Do not treat this pattern as a guarantee of strict FIFO ordering or starvation freedom; those properties depend on queue policy and workload.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
At the default READ COMMITTED isolation level, PostgreSQL warns that a locking query with ORDER BY can return rows apparently out of order if an ordering column changes while the query waits for a lock. If priority or age must remain stable during claims, prevent sort-key changes during that interval or use an application rule that otherwise serializes such changes. Test the chosen policy under the workload. Details are in the PostgreSQL 17 SELECT documentation.
Isolation levels and transaction failures
Under READ COMMITTED, a locking query can wait for a concurrent updater and then follow the updated-row behavior described above. Under REPEATABLE READ or SERIALIZABLE, a row changed since the transaction snapshot can cause the locking attempt to fail instead. Applications using either isolation level should handle transaction errors and retry when appropriate; a retry policy must account for the whole transaction, not just assume the lock will succeed on a second statement. See the PostgreSQL 16 SELECT documentation and PostgreSQL 17 transaction isolation documentation.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Explicitly locking selected rows also does not automatically enforce every business rule spanning multiple rows. If correctness depends on a broader invariant, choose a transaction and consistency strategy that protects that invariant; row locks on the rows selected by one query are not a general guarantee of serializable behavior. PostgreSQL discusses application-level consistency approaches in its application-level consistency documentation.
Trade-offs to decide before deployment
- Wait behavior: ordinary locking can wait,
NOWAITerrors, andSKIP LOCKEDbypasses rows locked by another transaction. - Claim batch size: larger batches reduce claim round trips but keep more rows locked during the transaction; smaller batches reduce lock exposure but can increase coordination overhead.
- Queue order: a priority or FIFO intention requires explicit ordering and a decision about whether out-of-order claims are acceptable.
- Recovery: a committed
runningstate needs a separate lease, timeout, or other recovery policy if a worker can disappear mid-job. - Isolation: stronger isolation may produce transaction failures that the worker must handle rather than treating every claim attempt as guaranteed to succeed.
These are design trade-offs, not published performance measurements. Validate the SQL, lock behavior, retry handling, and recovery rules against the PostgreSQL version and schema you deploy.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

