Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1emRYe-0000xW-5d for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Feb 2018 21:59:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1emRYd-0001u4-9Q for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Feb 2018 21:59:11 +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_2) (envelope-from ) id 1emRV8-0003kE-SY for pgsql-hackers@lists.postgresql.org; Thu, 15 Feb 2018 21:55:34 +0000 Received: from smtprelay0030.b.hostedemail.com ([64.98.42.30] helo=smtprelay.b.hostedemail.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1emRV4-0006qU-Td for pgsql-hackers@postgresql.org; Thu, 15 Feb 2018 21:55:34 +0000 Received: from filter.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay03.b.hostedemail.com (Postfix) with ESMTP id 8F52A1A701E; Thu, 15 Feb 2018 21:55:28 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 90,0,0,,d41d8cd98f00b204,alvherre@alvh.no-ip.org,:::::::::,RULES_HIT:41:355:379:599:967:973:988:989:1260:1277:1311:1312:1313:1314:1345:1359:1437:1515:1516:1518:1519:1534:1541:1593:1594:1595:1596:1711:1730:1747:1777:1792:2393:2525:2559:2563:2682:2685:2828:2859:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3353:3865:3866:3867:3868:3870:3871:3872:3873:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4250:4605:5007:6119:6261:9025:9121:10004:10400:10848:11232:11658:11914:12533:12663:12679:12740:12895:13069:13311:13357:13439:13894:13895:14721:14764:21080:21324:21451:21611:21627:21740:30012:30054,0,RBL:190.121.34.242:@alvh.no-ip.org:.lbl8.mailshell.net-62.8.63.100 64.201.201.201,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:no-ip.org-dnsbl7.mailshell.net-127.4.0.190,Custom_rules:0:0:0,LFtime:78,LUA_SUMMARY:none X-HE-Tag: egg03_69d83b74f713c X-Filterd-Recvd-Size: 2655 Received: from alvin.alvh.no-ip.org (unknown [190.121.34.242]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf06.b.hostedemail.com (Postfix) with ESMTPA; Thu, 15 Feb 2018 21:55:27 +0000 (UTC) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id 1CEE753D; Thu, 15 Feb 2018 18:55:25 -0300 (-03) Date: Thu, 15 Feb 2018 18:55:25 -0300 From: Alvaro Herrera To: Amit Langote Cc: Robert Haas , Peter Eisentraut , Pg Hackers , Simon Riggs Subject: Re: FOR EACH ROW triggers on partitioned tables Message-ID: <20180215215525.3anqmydfi6pfrmvf@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <77d52cfc-76d4-91ea-da90-ff2dc2db6f6b@lab.ntt.co.jp> User-Agent: NeoMutt/20170306-137-4415bd-dirty (1.8.0) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Amit Langote wrote: > On 2018/02/15 6:26, Alvaro Herrera wrote: > > Another option is to rethink this feature from the ground up: instead of > > cloning catalog rows for each children, maybe we should have the trigger > > lookup code, when running DML on the child relation (the partition), > > obtain trigger entries not only for the child relation itself but also > > for its parents recursively -- so triggers defined in the parent are > > fired for the partitions, too. I'm not sure what implications this has > > for constraint triggers. > > > > The behavior should be the same, except that you cannot modify the > > trigger (firing conditions, etc) on the partition individually -- it > > works at the level of the whole partitioned table instead. > > Do you mean to fire these triggers only if the parent table (not a child > table/partition) is addressed in the DML, right? If the table directly > addressed in the DML is a partition whose parent has a row-level trigger, > then that trigger should not get fired I suppose. No, I think that would be strange and cause data inconsistencies. Inserting directly into the partition is seen as a performance optimization (compared to inserted into the partitioned table), so we don't get to skip firing the triggers defined on the parent because the behavior would become different. In other words, the performance optimization breaks the database. Example: suppose the trigger is used to maintain an audit record trail. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services