SKIP LOCKED работает не совсем ожидаемо, если блокируются строки из нескольких таблиц.
То есть если сделать SELECT ... FOR UPDATE OF table1, table2 SKIP LOCKED, то строку в table1 он заблокирует без ожидания, а вот на table2 — встанет. Или ебнетеся с дедлоком, если нужна строка в table2 уже заблокирована и тоже ждет.
а есть какой-нибудь жизненный пример, где это используется? пишут, что обычно skip locked нужен для содания queue, но я бы предположил, что задачи для очереди всё же лежат в одной таблице