diff options
-rw-r--r-- | doc/src/sgml/ref/alter_foreign_table.sgml | 2 | ||||
-rw-r--r-- | doc/src/sgml/ref/alter_materialized_view.sgml | 2 | ||||
-rw-r--r-- | doc/src/sgml/ref/alter_table.sgml | 22 | ||||
-rw-r--r-- | doc/src/sgml/ref/create_table.sgml | 18 | ||||
-rw-r--r-- | src/backend/commands/tablecmds.c | 2 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 1 | ||||
-rw-r--r-- | src/bin/psql/tab-complete.c | 2 | ||||
-rw-r--r-- | src/test/regress/expected/alter_table.out | 2 | ||||
-rw-r--r-- | src/test/regress/sql/alter_table.sql | 2 |
9 files changed, 31 insertions, 22 deletions
diff --git a/doc/src/sgml/ref/alter_foreign_table.sgml b/doc/src/sgml/ref/alter_foreign_table.sgml index 7ca03f3ac9f..d056dc1bb13 100644 --- a/doc/src/sgml/ref/alter_foreign_table.sgml +++ b/doc/src/sgml/ref/alter_foreign_table.sgml @@ -41,7 +41,7 @@ ALTER FOREIGN TABLE [ IF EXISTS ] <replaceable class="parameter">name</replaceab ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STATISTICS <replaceable class="parameter">integer</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET ( <replaceable class="parameter">attribute_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] ) ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> RESET ( <replaceable class="parameter">attribute_option</replaceable> [, ... ] ) - ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } + ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ]) ADD <replaceable class="parameter">table_constraint</replaceable> [ NOT VALID ] VALIDATE CONSTRAINT <replaceable class="parameter">constraint_name</replaceable> diff --git a/doc/src/sgml/ref/alter_materialized_view.sgml b/doc/src/sgml/ref/alter_materialized_view.sgml index cae135c27a0..040ae53f982 100644 --- a/doc/src/sgml/ref/alter_materialized_view.sgml +++ b/doc/src/sgml/ref/alter_materialized_view.sgml @@ -39,7 +39,7 @@ ALTER MATERIALIZED VIEW ALL IN TABLESPACE <replaceable class="parameter">name</r ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STATISTICS <replaceable class="parameter">integer</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET ( <replaceable class="parameter">attribute_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] ) ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> RESET ( <replaceable class="parameter">attribute_option</replaceable> [, ... ] ) - ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } + ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET COMPRESSION <replaceable class="parameter">compression_method</replaceable> CLUSTER ON <replaceable class="parameter">index_name</replaceable> SET WITHOUT CLUSTER diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index f0f912a56c5..43d782fea90 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -53,7 +53,7 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STATISTICS <replaceable class="parameter">integer</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET ( <replaceable class="parameter">attribute_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] ) ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> RESET ( <replaceable class="parameter">attribute_option</replaceable> [, ... ] ) - ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } + ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET COMPRESSION <replaceable class="parameter">compression_method</replaceable> ADD <replaceable class="parameter">table_constraint</replaceable> [ NOT VALID ] ADD <replaceable class="parameter">table_constraint_using_index</replaceable> @@ -367,7 +367,7 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM <varlistentry> <term> - <literal>SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }</literal> + <literal>SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }</literal> <indexterm> <primary>TOAST</primary> <secondary>per-column storage settings</secondary> @@ -376,20 +376,24 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM <listitem> <para> This form sets the storage mode for a column. This controls whether this - column is held inline or in a secondary <acronym>TOAST</acronym> table, and - whether the data + column is held inline or in a secondary <acronym>TOAST</acronym> table, + and whether the data should be compressed or not. <literal>PLAIN</literal> must be used for fixed-length values such as <type>integer</type> and is inline, uncompressed. <literal>MAIN</literal> is for inline, compressible data. <literal>EXTERNAL</literal> is for external, uncompressed data, and <literal>EXTENDED</literal> is for external, - compressed data. <literal>EXTENDED</literal> is the default for most - data types that support non-<literal>PLAIN</literal> storage. + compressed data. + Writing <literal>DEFAULT</literal> sets the storage mode to the default + mode for the column's data type. <literal>EXTENDED</literal> is the + default for most data types that support non-<literal>PLAIN</literal> + storage. Use of <literal>EXTERNAL</literal> will make substring operations on very large <type>text</type> and <type>bytea</type> values run faster, - at the penalty of increased storage space. Note that - <literal>SET STORAGE</literal> doesn't itself change anything in the table, - it just sets the strategy to be pursued during future table updates. + at the penalty of increased storage space. + Note that <literal>ALTER TABLE ... SET STORAGE</literal> doesn't itself + change anything in the table; it just sets the strategy to be pursued + during future table updates. See <xref linkend="storage-toast"/> for more information. </para> </listitem> diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index c14b2010d81..c98223b2a51 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -22,7 +22,7 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] <replaceable class="parameter">table_name</replaceable> ( [ - { <replaceable class="parameter">column_name</replaceable> <replaceable class="parameter">data_type</replaceable> [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ] [ COMPRESSION <replaceable>compression_method</replaceable> ] [ COLLATE <replaceable>collation</replaceable> ] [ <replaceable class="parameter">column_constraint</replaceable> [ ... ] ] + { <replaceable class="parameter">column_name</replaceable> <replaceable class="parameter">data_type</replaceable> [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] [ COMPRESSION <replaceable>compression_method</replaceable> ] [ COLLATE <replaceable>collation</replaceable> ] [ <replaceable class="parameter">column_constraint</replaceable> [ ... ] ] | <replaceable>table_constraint</replaceable> | LIKE <replaceable>source_table</replaceable> [ <replaceable>like_option</replaceable> ... ] } [, ... ] @@ -299,7 +299,7 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM <varlistentry> <term> - <literal>STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }</literal> + <literal>STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }</literal> <indexterm> <primary>TOAST</primary> <secondary>per-column storage settings</secondary> @@ -314,12 +314,14 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM inline, uncompressed. <literal>MAIN</literal> is for inline, compressible data. <literal>EXTERNAL</literal> is for external, uncompressed data, and <literal>EXTENDED</literal> is for external, compressed data. - <literal>EXTENDED</literal> is the default for most data types that - support non-<literal>PLAIN</literal> storage. Use of - <literal>EXTERNAL</literal> will make substring operations on very large - <type>text</type> and <type>bytea</type> values run faster, at the penalty - of increased storage space. See <xref linkend="storage-toast"/> for more - information. + Writing <literal>DEFAULT</literal> sets the storage mode to the default + mode for the column's data type. <literal>EXTENDED</literal> is the + default for most data types that support non-<literal>PLAIN</literal> + storage. + Use of <literal>EXTERNAL</literal> will make substring operations on + very large <type>text</type> and <type>bytea</type> values run faster, + at the penalty of increased storage space. + See <xref linkend="storage-toast"/> for more information. </para> </listitem> </varlistentry> diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 6007e10730a..fc4bd0de91a 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -19311,6 +19311,8 @@ GetAttributeStorage(Oid atttypid, const char *storagemode) cstorage = TYPSTORAGE_EXTENDED; else if (pg_strcasecmp(storagemode, "main") == 0) cstorage = TYPSTORAGE_MAIN; + else if (pg_strcasecmp(storagemode, "default") == 0) + cstorage = get_typstorage(atttypid); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 2dddd8f302c..2a910ded15e 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -3758,6 +3758,7 @@ opt_column_compression: column_storage: STORAGE ColId { $$ = $2; } + | STORAGE DEFAULT { $$ = pstrdup("default"); } ; opt_column_storage: diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 4c45e4747a9..7b73886ce19 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2420,7 +2420,7 @@ psql_completion(const char *text, int start, int end) /* ALTER TABLE ALTER [COLUMN] <foo> SET STORAGE */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "STORAGE") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "STORAGE")) - COMPLETE_WITH("PLAIN", "EXTERNAL", "EXTENDED", "MAIN"); + COMPLETE_WITH("DEFAULT", "PLAIN", "EXTERNAL", "EXTENDED", "MAIN"); /* ALTER TABLE ALTER [COLUMN] <foo> SET STATISTICS */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "STATISTICS") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "STATISTICS")) diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index ca13f0c13ac..600e603bdfa 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -2262,7 +2262,7 @@ select reltoastrelid <> 0 as has_toast_table f (1 row) -alter table test_storage alter a set storage extended; -- re-add TOAST table +alter table test_storage alter a set storage default; -- re-add TOAST table select reltoastrelid <> 0 as has_toast_table from pg_class where oid = 'test_storage'::regclass; has_toast_table diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql index b85b6c73989..f58b2f75d5b 100644 --- a/src/test/regress/sql/alter_table.sql +++ b/src/test/regress/sql/alter_table.sql @@ -1535,7 +1535,7 @@ alter table test_storage alter a set storage plain; alter table test_storage add b int default random()::int; select reltoastrelid <> 0 as has_toast_table from pg_class where oid = 'test_storage'::regclass; -alter table test_storage alter a set storage extended; -- re-add TOAST table +alter table test_storage alter a set storage default; -- re-add TOAST table select reltoastrelid <> 0 as has_toast_table from pg_class where oid = 'test_storage'::regclass; |