Re: Declarative partitioning - another take
Robert Haas <robertmhaas@gmail.com>
On Fri, Oct 28, 2016 at 3:53 AM, Amit Langote <Langote_Amit_f8@lab.ntt.co.jp> wrote: > [ new patches ] Reviewing 0006: This patch seems scary. I sort of assumed from the title -- "Teach a few places to use partition check quals." -- that this was an optional thing, some kind of optimization from which we could reap further advantage once the basic infrastructure was in place. But it's not that at all. It's absolutely necessary that we do this, or data integrity is fundamentally compromised. How do we know that we've found all of the places that need to be taught about these new, uncatalogued constraints? I'm feeling fairly strongly like you should rewind and make the partitioning constraints normal catalogued constraints. That's got a number of advantages, most notably that we can be sure they will be properly enforced by the entire system (modulo existing bugs, of course). Also, they'll show up automatically in tools like psql's \d output, pgAdmin, and anything else that is accustomed to being able to find constraints in the catalog. We do need to make sure that those constraints can't be dropped (or altered?) inappropriately, but that's a relatively small problem. If we stick with the design you've got here, every client tool in the world needs to be updated, and I'm not seeing nearly enough advantage in this system to justify that kind of upheaval. In fact, as far as I can see, the only advantage of this approach is that when the insert arrives through the parent and is routed to the child by whatever tuple-routing code we end up with (I guess that's what 0008 does), we get to skip checking the constraint, saving CPU cycles. That's probably an important optimization, but I don't think that putting the partitioning constraint in the catalog in any way rules out the possibility of performing that optimization. It's just that instead of having the partitioning excluded-by-default and then sometimes choosing to include it, you'll have it included-by-default and then sometimes choose to exclude it. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Fix typo.
- 03bf59676ea0 10.0 landed
-
Document trigger-firing behavior for inheritance/partitioning.
- e17628145ac3 10.0 landed
-
Fire per-statement triggers on partitioned tables.
- e180c8aa8caf 10.0 landed
-
Set ecxt_scantuple correctly for tuple routing.
- 132488bfee68 10.0 landed
-
Fix interaction of partitioned tables with BulkInsertState.
- b1ecb9b3fcfb 10.0 landed
-
Avoid core dump for empty prepared statement in an aborted transaction.
- ba61a04bc7fe 10.0 cited
-
Fix some problems in check_new_partition_bound().
- 8a8afe2f54c2 10.0 landed
-
Remove unnecessary arguments from partitioning functions.
- 18fc5192a631 10.0 cited
-
Fix reporting of constraint violations for table partitioning.
- f1b4c771ea74 10.0 cited
-
Fix tuple routing in cases where tuple descriptors don't match.
- 2ac3ef7a01df 10.0 cited
-
Invalid parent's relcache after CREATE TABLE .. PARTITION OF.
- 7cd0fd655d68 10.0 landed
-
Doc: improve documentation about inheritance.
- 162477a63d3c 10.0 cited