Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ast>=refreshFrequency)不是真的条件?我还将网页表添加到了我原来的问题帖子中。@m_vdbeek:我添加了一个替代解决方案和更多信息。 BEGIN ISOLATION LEVEL SERIALIZABLE; UPDATE web_Sql_Postgresql_Concurrency_Transactions_Locking - Fatal编程技术网

Sql ast>=refreshFrequency)不是真的条件?我还将网页表添加到了我原来的问题帖子中。@m_vdbeek:我添加了一个替代解决方案和更多信息。 BEGIN ISOLATION LEVEL SERIALIZABLE; UPDATE web

Sql ast>=refreshFrequency)不是真的条件?我还将网页表添加到了我原来的问题帖子中。@m_vdbeek:我添加了一个替代解决方案和更多信息。 BEGIN ISOLATION LEVEL SERIALIZABLE; UPDATE web,sql,postgresql,concurrency,transactions,locking,Sql,Postgresql,Concurrency,Transactions,Locking,ast>=refreshFrequency)不是真的条件?我还将网页表添加到了我原来的问题帖子中。@m_vdbeek:我添加了一个替代解决方案和更多信息。 BEGIN ISOLATION LEVEL SERIALIZABLE; UPDATE webpages SET locked = TRUE WHERE url IN ( SELECT DISTINCT ON (source) url FROM webpa


ast>=refreshFrequency)不是真的条件?我还将
网页
表添加到了我原来的问题帖子中。@m_vdbeek:我添加了一个替代解决方案和更多信息。
BEGIN ISOLATION LEVEL SERIALIZABLE;
    UPDATE webpages
    SET locked = TRUE
    WHERE url IN 
        (
            SELECT DISTINCT ON (source) url
            FROM webpages
            WHERE
                (
                    last IS NULL
                    OR
                    last < refreshFrequency
                )
                AND
                locked = FALSE
            LIMIT limit
        )
    RETURNING *;
COMMIT;
CREATE TABLE webpages (
  last timestamp with time zone,
  locked boolean DEFAULT false,
  url text NOT NULL,
  source character varying(255) PRIMARY KEY
);
UPDATE webpages
SET locked = TRUE
WHERE url IN 
    (
        SELECT DISTINCT ON (source) url
        FROM webpages
        WHERE
            (
                last IS NULL
                OR
                last < refreshFrequency
            )
            AND
            locked = FALSE
        LIMIT limit
    )
    WHERE
       (
           last IS NULL
           OR
           last < refreshFrequency
        )
        AND
        locked = FALSE
URL       locked
----------------
A         false
A         true
   UPDATE webpages
    SET locked = TRUE
    WHERE url IN ( 'A' )
CREATE TABLE source (
  source_id serial NOT NULL PRIMARY KEY
, source    text NOT NULL
);

CREATE TABLE webpage (
  source_id int NOT NULL REFERENCES source
  url       text NOT NULL PRIMARY KEY
  locked    boolean NOT NULL DEFAULT false,        -- may not be needed
  last      timestamp NOT NULL DEFAULT '-infinity' -- makes query simpler
);
UPDATE webpage w
SET    locked = TRUE
FROM  (
   SELECT (SELECT url
           FROM   webpage
           WHERE  source_id = s.source_id
           AND   (last >= refreshFrequency) IS NOT TRUE
           AND    locked = FALSE
           AND    pg_try_advisory_xact_lock(url)  -- only true is free
           LIMIT  1     -- get 1 URL per source
          ) AS url
   FROM  (
      SELECT source_id  -- the FK column in webpage
      FROM   source
      ORDER  BY random()
      LIMIT  limit      --  random selection of "limit" sources
      ) s
   FOR    UPDATE
   ) l
WHERE  w.url = l.url
RETURNING *;
WITH RECURSIVE s AS (
   SELECT source_id, row_number() OVER (ORDER BY random()) AS rn
   FROM source  -- you might exclude "empty" sources early ...
   )
, page(source_id, rn, ct, url) AS (
   SELECT 0, 0, 0, ''::text   -- dummy init row
   UNION ALL
   SELECT s.source_id, s.rn
        , CASE WHEN t.url <> ''
               THEN p.ct + 1
               ELSE p.ct END  -- only inc. if url found last round
        , (SELECT url
           FROM   webpage
           WHERE  source_id = t.source_id
           AND   (last >= refreshFrequency) IS NOT TRUE
           AND    locked = FALSE  -- may not be needed
           AND    pg_try_advisory_xact_lock(url)  -- only true is free
           LIMIT  1           -- get 1 URL per source
          ) AS url            -- try, may come up empty
   FROM   page p
   JOIN   s ON s.rn = p.rn + 1
   WHERE  CASE WHEN p.url <> ''
               THEN p.ct + 1
               ELSE p.ct END < limit  -- your limit here
   )
SELECT url
FROM   page
WHERE  url <> '';             -- exclude '' and NULL