PostgreSQL Lock Pillar

I have a "Links" table with some download links.

My.NET application reads this table, takes a link, creates a web client and downloads the associated file. I want to create several streams that do this, but each must read a different record, otherwise two streams try to load the same file. How can I do that?

I tried this, but it does not work:

    public static Boolean Get_NextProcessingVideo(ref Int32 idVideo, ref String youtubeId, ref String title)
    {
        Boolean result = false;

        using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationDB.GetInstance().ConnectionString))
        {
            conn.Open();
            NpgsqlTransaction transaction = conn.BeginTransaction();

            String query = "BEGIN WORK; LOCK TABLE links IN ACCESS EXCLUSIVE MODE; SELECT v.idlink,  v.title " +
                " FROM video v  WHERE v.schedulingflag IS FALSE AND v.errorflag IS FALSE ORDER BY v.idvideo  LIMIT 1; " + 
                " COMMIT WORK;";
            NpgsqlCommand cmd = new NpgsqlCommand(query, conn, transaction);

            NpgsqlDataReader dr = cmd.ExecuteReader();

            if (dr.HasRows)
            {
                dr.Read();


                idVideo = Convert.ToInt32(dr["idvideo"]);
                title = dr["title"].ToString();

                Validate_Scheduling(idVideo); // 
                result = true;
            }

            transaction.Commit();
            conn.Close();

        }
        return result;
    }
+1
source share
1 answer

You have several options. The only thing you do not want to do, as you noticed, is locking the table.

  • . , . , , ( , ). , , , , , db, .

  • , . , , , , . , .

  • NOWAIT , . . Postgresql .

+1

All Articles