我有以下SQL:
SELECT id, url
FROM link
WHERE visited = false
ORDER BY id
LIMIT 500;
- * 500只是一个例子
我正在制作一个网络浏览器,并且有一个包含链接的表格。此SQL返回要访问的链接,但不是全部,只返回限制子句中定义的数量。
我将使用线程,如果第一次执行此查询,它将获得前500个链接,如果第二个线程执行相同的查询,它将获得下一个500个链接。换句话说,首先获得链接1到500,第二个线程获得501到1000,第三个线程获得1001到1500,依此类推。
可能它不需要使用线程,但是使用不同的计算机运行相同的应用程序。我不知道是否需要在表中创建一个字段来设置该行正被另一个线程/应用程序使用,或者我只能使用SQL / DBMS执行此操作。我正在使用PostgreSQL。
换句话说,我需要锁定一个咨询行,以便不会出现在另一个查询中。
答案 0 :(得分:0)
您是否尝试过更新/返回?
update link
set visiting = true
from (
select id
from link
where visiting = false
and visited = false
limit 500
for update
) as batch
where batch.id = link.id
returning *;
答案 1 :(得分:0)
跳过1500行并接下来的500
SELECT id, url
FROM link
WHERE visited = false
ORDER BY id
LIMIT 500 OFFSET 1500
http://www.postgresql.org/docs/8.3/interactive/queries-limit.html