aboutsummaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2024-02-16 11:51:35 +0100
committerPeter Eisentraut <peter@eisentraut.org>2024-02-16 13:27:46 +0100
commit0413a556990ba628a3de8a0b58be020fd9a14ed0 (patch)
tree1b87efcf4ff64c49f9bd293cab80818069a658ea /doc/src
parente85732dac0e9933cf1ec4f9df1d8ed9c221c17da (diff)
downloadpostgresql-0413a556990ba628a3de8a0b58be020fd9a14ed0.tar.gz
postgresql-0413a556990ba628a3de8a0b58be020fd9a14ed0.zip
Improve compression and storage support with inheritance
A child table can specify a compression or storage method different from its parents. This was previously an error. (But this was inconsistently enforced because for example the settings could be changed later using ALTER TABLE.) This now also allows an explicit override if multiple parents have different compression or storage settings, which was previously an error that could not be overridden. The compression and storage properties remains unchanged in a child inheriting from parent(s) after its creation, i.e., when using ALTER TABLE ... INHERIT. (This is not changed.) Before this change, the error detail would mention the first pair of conflicting parent compression or storage methods. But with this change it waits till the child specification is considered by which time we may have encountered many such conflicting pairs. Hence the error detail after this change does not include the conflicting compression/storage methods. Those can be obtained from parent definitions if necessary. The code to maintain list of all conflicting methods or even the first conflicting pair does not seem worth the convenience it offers. This change is inline with what we do with conflicting default values. Before this commit, the specified storage method could be stored in ColumnDef::storage (CREATE TABLE ... LIKE) or ColumnDef::storage_name (CREATE TABLE ...). This caused the MergeChildAttribute() and MergeInheritedAttribute() to ignore a storage method specified in the child definition since it looked only at ColumnDef::storage. This commit removes ColumnDef::storage and instead uses ColumnDef::storage_name to save any storage method specification. This is similar to how compression method specification is handled. Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/24656cec-d6ef-4d15-8b5b-e8dfc9c833a7@eisentraut.org
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/sgml/ref/create_table.sgml8
1 files changed, 7 insertions, 1 deletions
diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml
index 4cbaaccaf7c..fb0e9873877 100644
--- a/doc/src/sgml/ref/create_table.sgml
+++ b/doc/src/sgml/ref/create_table.sgml
@@ -398,7 +398,13 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
</para>
<para>
- Column <literal>STORAGE</literal> settings are also copied from parent tables.
+ Column storage and compression settings are inherited from parent
+ tables. If a column is inherited from multiple tables, the storage
+ settings or any explicit compression settings for the column must be the
+ same in all parent tables, else an error is reported. Storage or
+ compression settings explicitly specified for the new table override any
+ inherited settings and can also be used to override conflicting
+ inherited settings.
</para>
<para>