Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZhmNP-0006Sr-3F for pgsql-general@arkaria.postgresql.org; Thu, 01 Oct 2015 22:30:59 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZhmNO-0007nB-LM for pgsql-general@arkaria.postgresql.org; Thu, 01 Oct 2015 22:30:58 +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_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZhmL7-0004mZ-MH for pgsql-general@postgresql.org; Thu, 01 Oct 2015 22:28:37 +0000 Received: from mail-bn1on0067.outbound.protection.outlook.com ([157.56.110.67] helo=na01-bn1-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZhmL3-0005lt-Rl for pgsql-general@postgresql.org; Thu, 01 Oct 2015 22:28:36 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jim.Nasby@bluetreble.com; Received: from decina.local (70.113.16.71) by SN1PR11MB0687.namprd11.prod.outlook.com (10.163.207.145) with Microsoft SMTP Server (TLS) id 15.1.280.20; Thu, 1 Oct 2015 22:28:28 +0000 Subject: Re: Serialization errors despite KEY SHARE/NO KEY UPDATE To: Olivier Dony , References: <560AA479.4080807@odoo.com> From: Jim Nasby Message-ID: <560DB385.2080904@BlueTreble.com> Date: Thu, 1 Oct 2015 17:28:21 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <560AA479.4080807@odoo.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [70.113.16.71] X-ClientProxiedBy: BLUPR08CA0062.namprd08.prod.outlook.com (10.141.200.42) To SN1PR11MB0687.namprd11.prod.outlook.com (25.163.207.145) X-Microsoft-Exchange-Diagnostics: 1; SN1PR11MB0687; 2:osqhVOjTprBBdpG3dEVAQR7B79A/ahNmZhjn5VEYzLCSKqRJ7AQITxqwHFkEjl6VuOOKETtvYMuiuuuyUUAVcuQ3BSvpuNRhNsKd8PGtwOegvuB1iVBLophttiibal1iQ7es3eZEubGCxxJ9ENplyQOOczFXw0FprrWxBw5Irm4=; 3:8Nt6a2cb3SuodmAxDQjKlvyNLwd1qfGuz6p+sYIUtWDr0176Cl7hSIsEi8L0QDvgf3zXobctRbO9VwGDV2ImBe9QvWdkw1xdOjgU6TlEsYPpcJh0mW5+GATt0Sr7I0smmCqs7xhKGoS4giwD5GP5QA==; 25:Ghz9Em2lcT6dTi85IfbJtTW2w6kAwnpSxrrnPJ3o2k3gGJ9VNP3UtdIXdRM79EXJ/i02ECrA1G4VqkU8jL6ZF1uwzsLpfklGuRfEO8JFZB0SY1VNVqjIpqQsN7H3XkxDQI7qkxjbRgbmlPScXOLJoboJvnV4K8/sBonjyqFIBWUbNJzE7jbEHbCBaE7hKe/Xzn9NszJIw9fDO5CYGpc33fwtZN9zI+zZ+5iNcmlEJcWXQNfj4Ud32JtdnZ5hc/1klQE7OTRhXvozaaAjpVTUag== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR11MB0687; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001); SRVR:SN1PR11MB0687; BCL:0; PCL:0; RULEID:; SRVR:SN1PR11MB0687; X-Microsoft-Exchange-Diagnostics: 1; SN1PR11MB0687; 4:nrxzRCXUFNfYKaYWO0C0hwJ4bI+/Kz2tvviWXdXshA32x3RFogg2nMbJA3kJ/brNxhbMgtQ4EPNgv9MtRl035w+KsRXMCA4yKgx3Ggt2tBjLJzKqQk0SOA66GcfmIKJCVgfwqI+pg22yykZ8b4j31cEXvAyjsrKG/mf+20Q+C8zi0usxmCX1l1+dQNGi9ldFd1YgOUbjACmR1YbOuNIyKcC2oceBJQoRCttoCMN7VttnIrBroVFAtcpC96RjQvKLltAAfX+XBIP6o4/elUFhmeJj5IxQaKZT4svaVH/GEg1q7hopHIFDOqRKsdXbX1iCyQybByN3MOtMx7mRmfYo36LDR6Un7esB+O0DAPa1oUM= X-Forefront-PRVS: 0716E70AB6 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(377454003)(479174004)(189002)(51914003)(24454002)(199003)(33656002)(101416001)(97736004)(64126003)(66066001)(105586002)(42186005)(86362001)(87976001)(64706001)(65806001)(107886002)(65956001)(40100003)(65816999)(59896002)(47776003)(2420400006)(62966003)(5001960100002)(7110500001)(50466002)(83506001)(87266999)(5007970100001)(2950100001)(10710500005)(77156002)(46102003)(50986999)(5001830100001)(122386002)(106356001)(5004730100002)(77096005)(54356999)(189998001)(4001350100001)(68736005)(36756003)(19580395003)(80316001)(92566002)(5008740100001)(81156007)(5001860100001)(76176999)(4001540100001)(23676002)(5001770100001)(15975445007)(85282002)(336755003)(18886065003); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR11MB0687; H:decina.local; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: bluetreble.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjExTUIwNjg3OzIzOisyam9BQytEMVQ0Rklub3RJM081dGZrMVM5?= =?utf-8?B?bW41ZGZtRHM5SUVUWlVRcFo1aXFFL1huMFloRkZQTVlZOVlzakxmaWliT25G?= =?utf-8?B?V1NXc3FkT2h5L20yZW9qai9HK1NPV1FERVprb1BMeVJKNnpPdzQ3cmNZVldU?= =?utf-8?B?THhQcnUwditHMWVlQmtNa1VIU0Z1a2JDb3NFbGJuMTR0N3dUVEpqZjFIK1Mr?= =?utf-8?B?dUdzTFdZM0ErenRaMXdCZlh1NWprUGphamtqd3dKelg5YW1YU29aQy9lZHJB?= =?utf-8?B?M2NpdEwwdlg1NXNJai85VXZiRitOZVBWTGM4cnFXbk55MDdlNjRKRGhuTGhU?= =?utf-8?B?S2p0dkNwN0o5OUFqY1hHOGVPQWhNUXRBMDc3WlQ5aHlXeDJDdnUrRnlFc043?= =?utf-8?B?OHMwdkNEeDZPSGZyNFF2eHNzQWpDZUlNNEVDMnVqRXJDdWtQTDZqWFF6MGpu?= =?utf-8?B?RG9Wc0ZmY2tJYzRJSEdwL0ZOaXJDcm5obWczU25iUmxuSGdCT2FiZnFmYzFQ?= =?utf-8?B?Z2FGMHd0UE83bDJtaHkzdC82U3BXR2FMbzdpYU1jR0IwUFd5cWZhYVdBZlp2?= =?utf-8?B?N1VIaGprbW56cEgxdER6MG1sSENZQ1Fxd2N0NEt5ZnVxSStRbkIveVZlcFZu?= =?utf-8?B?QUZOenBjbmpFUkZ0RVowRHYxTnErQWtyT0FKL1JrTk1tb1g3c2Z3VEFuRDYw?= =?utf-8?B?dTRqN21hVVFVenVuZVZheUpDY2RaczcwR3h3UXo2NmtCa05DdjFzQnNGbDhJ?= =?utf-8?B?cWZGb2FhZEhnaVg2Q3FQbm1TRys3YUVGSC8rZ1RBcDlYK1c5SGkzaURxL2Qr?= =?utf-8?B?UzR3bjErSCtibEVjR3RlNW5LV3Q5YTRlbWJZcmw1cytrTmpFNGVVQVpjOU1q?= =?utf-8?B?RzhlQWJSTVdQbTlpUlk3N1lQV0RaS0pteDhUU2hZaUtBUXlqd3FUS0pzemdz?= =?utf-8?B?OG52dUJZZFlHTTcvdkdycC93eHQ0cEEwQTdxRFZLK1l0TXZVVko0UjVqT0lD?= =?utf-8?B?akN0bVpSYUpDK1YvYXpudTZYNlIxbTRwQ2FpSDVIejgyNDlEemhqY2s5WHNT?= =?utf-8?B?VGIydkxHcm5nZHNUNXJ2SXVxNG1CS0dzR0xac0lSamsxQk1DeDN2SHdBcjhz?= =?utf-8?B?T0lYWkFKRVI5YnRCR1dQaFBWMUZZVXE4dVFHd0ppdk9hc1VKWUd0d0lXVldq?= =?utf-8?B?QXVSZCtxamVBcm1PbUViYmlROU1BK0psNVVCaU5tWFlaZWdCOG5yRHd1Y0lB?= =?utf-8?B?NllpaGIydWZxVFdZQWVGbUpUeGdWdnE5a0xyNFBLVVRiaGJMS24xS0JURXc4?= =?utf-8?B?aldhWnhUcytJZyt2MDFRazZxWmJlaTUxRkIvL2M0UVdYVlZxaVhERXVhQ1lv?= =?utf-8?B?Skt6SWNlUHNxNFJDMlNJZ1VXOGhIS1BiTVJMMTlHOUJBdUlYdmxrbGFJT2My?= =?utf-8?B?cDB0ejlKN2czeXd0d0owOG9FRkNGTVVrdVlhL2NydWp5ODIxcks4aUEyK0dp?= =?utf-8?B?SlVyYmNRbkNqWVN5SHM3M2JJMFBHNVgvdXlXU2VlL092WGdVMTFqNEU1T1dr?= =?utf-8?B?aFh5QW0ySmgvSEtsNThGNXFnYk1YTStjcmJwY2p1T0hseHNZU2JXR1hyTXdk?= =?utf-8?B?TGszZFRFUUtnb2pON3BQQkF5eEhzQjg0QjVTOWQzb2wyWit3N3hudGplNGJF?= =?utf-8?B?Z21DREZHUFBHeDFDd1ZtOFVaalgrSXZTbE12dTViV2tpdlJQd3JJcWRFMHV0?= =?utf-8?B?N3FnVEk0NjgyVHppK2ZDaG9kRnhNY1JWWmtKaG4xaFJFMEpsRXhQVVR1aVJD?= =?utf-8?B?VktnWjVDM2RRNWZZRGFOdlNteFJzSUVZdDQrRy9vM1dvMTNEZGNRU3MrMFg4?= =?utf-8?B?bGtQYXlWbWc0NUFKZW9FNjZPREo3eW5obFRkbVA4akdjTnFPTGI4VHJ2U29x?= =?utf-8?B?VFFoZ1cvT2JmcytEcjc0WnY2UjRKZFFRK0RoU0Z0YnRKV1VZOEJEOVFzcmhu?= =?utf-8?B?cXdLZVdLQ1ZhZ2VrRm9KcmtPK1JpMWR4TmI2c3hvRnZCWUhMM0E4TUVrNUlm?= =?utf-8?B?bVFWUXAvdG04MDk5cVpGbW0zVjZUSTAxekUwaml5TkZkRGJsN3A1dG9mcXBs?= =?utf-8?B?cnZkcHE1emVxWWN6Z1hiUlJzclFrTXM0VGtrM2t2MzE1R3VSL0pkcjhJUGQr?= =?utf-8?B?NFhpRGZhUTJ1K21TbTNEODVqMjBRPT0=?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR11MB0687; 5:HTLsEQt+5wQfp4Zrs2e1xWm+/Td68BszJ5SvftpuYlrdwbS14fFV6vPMfl1PnSFdDDIcwia3EvpTAl8xoNcp2EISXCozeLCSgi84OG92knAg7qVa2ejlKCJau0SMUnX1c8N3nlH0ZZZB32Itfqdfww==; 24:T9qfAtWYl6zUlrUHT9eyonnyHMzZR4JB++q4RsAZRXB2YHHBR515eKXkxc348wzxAMnFK40s+gX2x+e5usoLbgCeEzBH47RhqD7iGkcFjZc=; 20:dgn+gEXSa+tGX1TtTVr0Xy05bLGtK0B/F+Ghi5P0+Ztcvhm/WRXHW9xKUYVI2RiIuwKMbaNtoos+NWP5/m8AQw== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: bluetreble.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2015 22:28:28.1239 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR11MB0687 X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-general Precedence: bulk Sender: pgsql-general-owner@postgresql.org On 9/29/15 9:47 AM, Olivier Dony wrote: > My understanding of the KEY SHARE/NO KEY UPDATE locks introduced in 9.3 > was that they would avoid side-effects/blocking between transactions > that are only linked via FK constraints, as long as the target PK was > not touched. Isn't it the case here? Not quite. Any unique index that isn't partial and isn't a functional index can satisfy a foreign key. That means that if you change a field that is in ANY unique index that update becomes a FOR KEY UPDATE. > If not, is there a reliable way to make T2 fail instead of T1 in such > situations? I've tried adding an explicit > "SELECT date FROM users WHERE id = 1 FOR UPDATE NOWAIT" > at the beginning of T2 but that doesn't block at all. > > Thanks for the clarifications! > > > -- Setup tables > CREATE TABLE users ( id serial PRIMARY KEY, > name varchar, > date timestamp ); > CREATE TABLE orders ( id serial PRIMARY KEY, > name varchar, > user_id int REFERENCES users (id) ); > INSERT INTO users (id, name) VALUES (1, 'foo'); > INSERT INTO orders (id, name) VALUES (1, 'order 1'); > > > -- Run 2 concurrent transactions: T1 and T2 > T1 T2 > |-----------------------------|----------------------------------| > BEGIN ISOLATION LEVEL > REPEATABLE READ; > > UPDATE orders > SET name = 'order of foo', > user_id = 1 > WHERE id = 1; > > BEGIN ISOLATION LEVEL > REPEATABLE READ; > > UPDATE users > SET date = now() > WHERE id = 1; > > COMMIT; > > UPDATE orders > SET name = 'order of foo (2)', > user_id = 1 > WHERE id = 1; > > T1 fails with: > ERROR: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."users" x WHERE > "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x" This isn't a locking failure, it's a serialization failure. I'm not sure why it's happening though... is there an index on date? -- Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX Experts in Analytics, Data Architecture and PostgreSQL Data in Trouble? Get it in Treble! http://BlueTreble.com -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general