Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hsT6I-0004zh-Pd for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Jul 2019 14:27:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hsT6G-0005rK-BX for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Jul 2019 14:27:36 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hsT6G-0005qv-2t for pgsql-hackers@lists.postgresql.org; Tue, 30 Jul 2019 14:27:36 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hsT6B-0005QO-IG for pgsql-hackers@postgresql.org; Tue, 30 Jul 2019 14:27:33 +0000 Received: from sss1.sss.pgh.pa.us (localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.4/8.14.4) with ESMTP id x6UEROa7011848; Tue, 30 Jul 2019 10:27:24 -0400 From: Tom Lane To: Robert Haas cc: Michael Paquier , Andres Freund , Alvaro Herrera , PostgreSQL Hackers Subject: Re: TopoSort() fix In-reply-to: References: <20190726220538.GA17809@alvherre.pgsql> <20190726234835.xqyfukqhhzdiqoih@alap3.anarazel.de> <17997.1564187056@sss.pgh.pa.us> <20190729015059.GE6959@paquier.xyz> <23797.1564412165@sss.pgh.pa.us> <3243.1564437314@sss.pgh.pa.us> <13215.1564451308@sss.pgh.pa.us> Comments: In-reply-to Robert Haas message dated "Mon, 29 Jul 2019 22:06:09 -0400" MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <11846.1564496844.1@sss.pgh.pa.us> Date: Tue, 30 Jul 2019 10:27:24 -0400 Message-ID: <11847.1564496844@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Robert Haas writes: > On Mon, Jul 29, 2019 at 9:48 PM Tom Lane wrote: >> I believe the only accessible route to taking any sort of new lock >> in a parallel worker is catalog lookups causing AccessShareLock on >> a catalog. > Can't the worker just query a previously-untouched table, maybe by > constructing a string and then using EXECUTE to execute it? Hm, yeah, looks like you could get a new AccessShareLock that way too. But not any exclusive lock. I also looked into whether one could use SELECT FOR UPDATE/SHARE to get stronger locks at a tuple level, but that's been blocked off as well. You guys really did a pretty good job of locking that down. After thinking about this for awhile, though, I believe it might be reasonable to just remove PreventAdvisoryLocksInParallelMode() altogether. The "parallel unsafe" markings on the advisory-lock functions seem like adequate protection against somebody running them in a parallel worker. If you defeat that by calling them from a mislabeled-parallel-safe wrapper (as the proposed test case does), then any negative consequences are on your own head. AFAICT the only actual negative consequence is that the locks disappear the moment the parallel worker exits, so we'd not be opening any large holes even to people who rip off the safety cover. (BTW, why aren't these functions just "parallel restricted"?) regards, tom lane