pgsql: Clarify use of temporary tables within partition trees
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: pgsql-committers@lists.postgresql.org
Date: 2018-06-20T01:53:35Z
Lists: pgsql-hackers
Clarify use of temporary tables within partition trees Since their introduction, partition trees have been a bit lossy regarding temporary relations. Inheritance trees respect the following patterns: 1) a child relation can be temporary if the parent is permanent. 2) a child relation can be temporary if the parent is temporary. 3) a child relation cannot be permanent if the parent is temporary. 4) The use of temporary relations also imply that when both parent and child need to be from the same sessions. Partitions share many similar patterns with inheritance, however the handling of the partition bounds make the situation a bit tricky for case 1) as the partition code bases a lot of its lookup code upon PartitionDesc which does not really look after relpersistence. This causes for example a temporary partition created by session A to be visible by another session B, preventing this session B to create an extra partition which overlaps with the temporary one created by A with a non-intuitive error message. There could be use-cases where mixing permanent partitioned tables with temporary partitions make sense, but that would be a new feature. Partitions respect 2), 3) and 4) already. It is a bit depressing to see those error checks happening in MergeAttributes() whose purpose is different, but that's left as future refactoring work. Back-patch down to 10, which is where partitioning has been introduced, except that default partitions do not apply there. Documentation also includes limitations related to the use of temporary tables with partition trees. Reported-by: David Rowley Author: Amit Langote, Michael Paquier Reviewed-by: Ashutosh Bapat, Amit Langote, Michael Paquier Discussion: https://postgr.es/m/CAKJS1f94Ojk0og9GMkRHGt8wHTW=ijq5KzJKuoBoqWLwSVwGmw@mail.gmail.com Branch ------ REL_10_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/5862174ec78a173c41710c5ef33feb993ae45cc7 Modified Files -------------- doc/src/sgml/ddl.sgml | 10 ++++++++++ src/backend/commands/tablecmds.c | 21 +++++++++++++++++++++ src/test/regress/expected/alter_table.out | 16 ++++++++++++++++ src/test/regress/expected/create_table.out | 10 ++++++++++ src/test/regress/expected/foreign_data.out | 12 ++++++++++++ src/test/regress/sql/alter_table.sql | 15 +++++++++++++++ src/test/regress/sql/create_table.sql | 9 +++++++++ src/test/regress/sql/foreign_data.sql | 11 +++++++++++ 8 files changed, 104 insertions(+)
Commits
-
Remove dead code for temporary relations in partition planning
- 5fca035903a2 11.0 landed
- fc057b2b8fc3 12.0 landed
-
Clarify use of temporary tables within partition trees
- 5862174ec78a 10.5 cited
-
Expand partitioned table RTEs level by level, without flattening.
- 0a480502b092 11.0 cited