public inbox for [email protected]help / color / mirror / Atom feed
[PATCH v16 03/10] Add tests on pg_ls_dir before changing it 2+ messages / 2 participants [nested] [flat]
* [PATCH v16 03/10] Add tests on pg_ls_dir before changing it @ 2020-03-17 18:16 Justin Pryzby <[email protected]> 0 siblings, 0 replies; 2+ messages in thread From: Justin Pryzby @ 2020-03-17 18:16 UTC (permalink / raw) --- src/test/regress/expected/misc_functions.out | 18 ++++++++++++++++++ src/test/regress/sql/misc_functions.sql | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/src/test/regress/expected/misc_functions.out b/src/test/regress/expected/misc_functions.out index d3acb98d04..2e87c548eb 100644 --- a/src/test/regress/expected/misc_functions.out +++ b/src/test/regress/expected/misc_functions.out @@ -201,6 +201,24 @@ select count(*) > 0 from t (1 row) +select * from (select pg_ls_dir('.', false, true) as name) as ls where ls.name='.'; -- include_dot_dirs=true + name +------ + . +(1 row) + +select * from (select pg_ls_dir('.', false, false) as name) as ls where ls.name='.'; -- include_dot_dirs=false + name +------ +(0 rows) + +select pg_ls_dir('does not exist', true, false); -- ok with missingok=true + pg_ls_dir +----------- +(0 rows) + +select pg_ls_dir('does not exist'); -- fails with missingok=false +ERROR: could not open directory "does not exist": No such file or directory -- -- Test adding a support function to a subject function -- diff --git a/src/test/regress/sql/misc_functions.sql b/src/test/regress/sql/misc_functions.sql index 094e8f8296..f6857ad177 100644 --- a/src/test/regress/sql/misc_functions.sql +++ b/src/test/regress/sql/misc_functions.sql @@ -60,6 +60,11 @@ select count(*) > 0 from where spcname = 'pg_default') pts join pg_database db on pts.pts = db.oid; +select * from (select pg_ls_dir('.', false, true) as name) as ls where ls.name='.'; -- include_dot_dirs=true +select * from (select pg_ls_dir('.', false, false) as name) as ls where ls.name='.'; -- include_dot_dirs=false +select pg_ls_dir('does not exist', true, false); -- ok with missingok=true +select pg_ls_dir('does not exist'); -- fails with missingok=false + -- -- Test adding a support function to a subject function -- -- 2.17.0 --2FkSFaIQeDFoAt0B Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v16-0004-Add-pg_ls_dir_metadata-to-list-a-dir-with-file-m.patch" ^ permalink raw reply [nested|flat] 2+ messages in thread
* Save a few bytes in pg_attribute @ 2023-03-20 10:00 Peter Eisentraut <[email protected]> 0 siblings, 0 replies; 2+ messages in thread From: Peter Eisentraut @ 2023-03-20 10:00 UTC (permalink / raw) To: pgsql-hackers After the discussion in [0] ff., I was looking around in pg_attribute and noticed that we could possibly save 4 bytes. We could change both attstattarget and attinhcount from int4 to int2, which together with some reordering would save 4 bytes from the fixed portion. attstattarget is already limited to 10000, so this wouldn't lose anything. For attinhcount, I don't see any documented limits. But it seems unlikely to me that someone would need more than 32k immediate inheritance parents on a column. (Maybe an overflow check would be useful, though, to prevent shenanigans.) The attached patch seems to work. Thoughts? [0]: https://www.postgresql.org/message-id/20230313204119.4mkepdvixcxrwpsc%40awork3.anarazel.de From 400f44d18875c40605147c8d81793c6dcc46f8a6 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut <[email protected]> Date: Mon, 20 Mar 2023 09:51:20 +0100 Subject: [PATCH] Save a few bytes in pg_attribute attstattarget and attinhcount can be converted to int16 (from int32). --- doc/src/sgml/catalogs.sgml | 36 +++++++++++++++--------------- src/backend/catalog/heap.c | 4 ++-- src/backend/catalog/index.c | 2 +- src/include/catalog/pg_attribute.h | 20 ++++++++--------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 746baf5053..ad5d15ec49 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1164,23 +1164,6 @@ <title><structname>pg_attribute</structname> Columns</title> </para></entry> </row> - <row> - <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>attstattarget</structfield> <type>int4</type> - </para> - <para> - <structfield>attstattarget</structfield> controls the level of detail - of statistics accumulated for this column by - <link linkend="sql-analyze"><command>ANALYZE</command></link>. - A zero value indicates that no statistics should be collected. - A negative value says to use the system default statistics target. - The exact meaning of positive values is data type-dependent. - For scalar data types, <structfield>attstattarget</structfield> - is both the target number of <quote>most common values</quote> - to collect, and the target number of histogram bins to create. - </para></entry> - </row> - <row> <entry role="catalog_table_entry"><para role="column_definition"> <structfield>attlen</structfield> <type>int2</type> @@ -1362,7 +1345,7 @@ <title><structname>pg_attribute</structname> Columns</title> <row> <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>attinhcount</structfield> <type>int4</type> + <structfield>attinhcount</structfield> <type>int2</type> </para> <para> The number of direct ancestors this column has. A column with a @@ -1370,6 +1353,23 @@ <title><structname>pg_attribute</structname> Columns</title> </para></entry> </row> + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attstattarget</structfield> <type>int2</type> + </para> + <para> + <structfield>attstattarget</structfield> controls the level of detail + of statistics accumulated for this column by + <link linkend="sql-analyze"><command>ANALYZE</command></link>. + A zero value indicates that no statistics should be collected. + A negative value says to use the system default statistics target. + The exact meaning of positive values is data type-dependent. + For scalar data types, <structfield>attstattarget</structfield> + is both the target number of <quote>most common values</quote> + to collect, and the target number of histogram bins to create. + </para></entry> + </row> + <row> <entry role="catalog_table_entry"><para role="column_definition"> <structfield>attcollation</structfield> <type>oid</type> diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 4f006820b8..c67dfffa56 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -732,7 +732,6 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attname - 1] = NameGetDatum(&attrs->attname); slot[slotCount]->tts_values[Anum_pg_attribute_atttypid - 1] = ObjectIdGetDatum(attrs->atttypid); - slot[slotCount]->tts_values[Anum_pg_attribute_attstattarget - 1] = Int32GetDatum(attrs->attstattarget); slot[slotCount]->tts_values[Anum_pg_attribute_attlen - 1] = Int16GetDatum(attrs->attlen); slot[slotCount]->tts_values[Anum_pg_attribute_attnum - 1] = Int16GetDatum(attrs->attnum); slot[slotCount]->tts_values[Anum_pg_attribute_attndims - 1] = Int32GetDatum(attrs->attndims); @@ -749,7 +748,8 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attgenerated - 1] = CharGetDatum(attrs->attgenerated); slot[slotCount]->tts_values[Anum_pg_attribute_attisdropped - 1] = BoolGetDatum(attrs->attisdropped); slot[slotCount]->tts_values[Anum_pg_attribute_attislocal - 1] = BoolGetDatum(attrs->attislocal); - slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int32GetDatum(attrs->attinhcount); + slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int16GetDatum(attrs->attinhcount); + slot[slotCount]->tts_values[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(attrs->attstattarget); slot[slotCount]->tts_values[Anum_pg_attribute_attcollation - 1] = ObjectIdGetDatum(attrs->attcollation); if (attoptions && attoptions[natts] != (Datum) 0) slot[slotCount]->tts_values[Anum_pg_attribute_attoptions - 1] = attoptions[natts]; diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 7777e7ec77..bccea1c749 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1812,7 +1812,7 @@ index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName) memset(repl_repl, false, sizeof(repl_repl)); repl_repl[Anum_pg_attribute_attstattarget - 1] = true; - repl_val[Anum_pg_attribute_attstattarget - 1] = Int32GetDatum(attstattarget); + repl_val[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(attstattarget); newTuple = heap_modify_tuple(attrTuple, RelationGetDescr(pg_attribute), diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index b561e17781..a0d6409036 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -52,15 +52,6 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ Oid atttypid BKI_LOOKUP_OPT(pg_type); - /* - * attstattarget is the target number of statistics datapoints to collect - * during VACUUM ANALYZE of this column. A zero here indicates that we do - * not wish to collect any stats about this column. A "-1" here indicates - * that no value has been explicitly set for this column, so ANALYZE - * should use the default setting. - */ - int32 attstattarget BKI_DEFAULT(-1); - /* * attlen is a copy of the typlen field from pg_type for this attribute. * See atttypid comments above. @@ -165,7 +156,16 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, bool attislocal BKI_DEFAULT(t); /* Number of times inherited from direct parent relation(s) */ - int32 attinhcount BKI_DEFAULT(0); + int16 attinhcount BKI_DEFAULT(0); + + /* + * attstattarget is the target number of statistics datapoints to collect + * during VACUUM ANALYZE of this column. A zero here indicates that we do + * not wish to collect any stats about this column. A "-1" here indicates + * that no value has been explicitly set for this column, so ANALYZE + * should use the default setting. + */ + int16 attstattarget BKI_DEFAULT(-1); /* attribute's collation, if any */ Oid attcollation BKI_LOOKUP_OPT(pg_collation); base-commit: 0b51d423e974557e821d890c0a3a49e419a19caa -- 2.39.2 Attachments: [text/plain] 0001-Save-a-few-bytes-in-pg_attribute.patch (7.3K, ../../[email protected]/2-0001-Save-a-few-bytes-in-pg_attribute.patch) download | inline diff: From 400f44d18875c40605147c8d81793c6dcc46f8a6 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut <[email protected]> Date: Mon, 20 Mar 2023 09:51:20 +0100 Subject: [PATCH] Save a few bytes in pg_attribute attstattarget and attinhcount can be converted to int16 (from int32). --- doc/src/sgml/catalogs.sgml | 36 +++++++++++++++--------------- src/backend/catalog/heap.c | 4 ++-- src/backend/catalog/index.c | 2 +- src/include/catalog/pg_attribute.h | 20 ++++++++--------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 746baf5053..ad5d15ec49 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1164,23 +1164,6 @@ <title><structname>pg_attribute</structname> Columns</title> </para></entry> </row> - <row> - <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>attstattarget</structfield> <type>int4</type> - </para> - <para> - <structfield>attstattarget</structfield> controls the level of detail - of statistics accumulated for this column by - <link linkend="sql-analyze"><command>ANALYZE</command></link>. - A zero value indicates that no statistics should be collected. - A negative value says to use the system default statistics target. - The exact meaning of positive values is data type-dependent. - For scalar data types, <structfield>attstattarget</structfield> - is both the target number of <quote>most common values</quote> - to collect, and the target number of histogram bins to create. - </para></entry> - </row> - <row> <entry role="catalog_table_entry"><para role="column_definition"> <structfield>attlen</structfield> <type>int2</type> @@ -1362,7 +1345,7 @@ <title><structname>pg_attribute</structname> Columns</title> <row> <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>attinhcount</structfield> <type>int4</type> + <structfield>attinhcount</structfield> <type>int2</type> </para> <para> The number of direct ancestors this column has. A column with a @@ -1370,6 +1353,23 @@ <title><structname>pg_attribute</structname> Columns</title> </para></entry> </row> + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attstattarget</structfield> <type>int2</type> + </para> + <para> + <structfield>attstattarget</structfield> controls the level of detail + of statistics accumulated for this column by + <link linkend="sql-analyze"><command>ANALYZE</command></link>. + A zero value indicates that no statistics should be collected. + A negative value says to use the system default statistics target. + The exact meaning of positive values is data type-dependent. + For scalar data types, <structfield>attstattarget</structfield> + is both the target number of <quote>most common values</quote> + to collect, and the target number of histogram bins to create. + </para></entry> + </row> + <row> <entry role="catalog_table_entry"><para role="column_definition"> <structfield>attcollation</structfield> <type>oid</type> diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 4f006820b8..c67dfffa56 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -732,7 +732,6 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attname - 1] = NameGetDatum(&attrs->attname); slot[slotCount]->tts_values[Anum_pg_attribute_atttypid - 1] = ObjectIdGetDatum(attrs->atttypid); - slot[slotCount]->tts_values[Anum_pg_attribute_attstattarget - 1] = Int32GetDatum(attrs->attstattarget); slot[slotCount]->tts_values[Anum_pg_attribute_attlen - 1] = Int16GetDatum(attrs->attlen); slot[slotCount]->tts_values[Anum_pg_attribute_attnum - 1] = Int16GetDatum(attrs->attnum); slot[slotCount]->tts_values[Anum_pg_attribute_attndims - 1] = Int32GetDatum(attrs->attndims); @@ -749,7 +748,8 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, slot[slotCount]->tts_values[Anum_pg_attribute_attgenerated - 1] = CharGetDatum(attrs->attgenerated); slot[slotCount]->tts_values[Anum_pg_attribute_attisdropped - 1] = BoolGetDatum(attrs->attisdropped); slot[slotCount]->tts_values[Anum_pg_attribute_attislocal - 1] = BoolGetDatum(attrs->attislocal); - slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int32GetDatum(attrs->attinhcount); + slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int16GetDatum(attrs->attinhcount); + slot[slotCount]->tts_values[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(attrs->attstattarget); slot[slotCount]->tts_values[Anum_pg_attribute_attcollation - 1] = ObjectIdGetDatum(attrs->attcollation); if (attoptions && attoptions[natts] != (Datum) 0) slot[slotCount]->tts_values[Anum_pg_attribute_attoptions - 1] = attoptions[natts]; diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 7777e7ec77..bccea1c749 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1812,7 +1812,7 @@ index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName) memset(repl_repl, false, sizeof(repl_repl)); repl_repl[Anum_pg_attribute_attstattarget - 1] = true; - repl_val[Anum_pg_attribute_attstattarget - 1] = Int32GetDatum(attstattarget); + repl_val[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(attstattarget); newTuple = heap_modify_tuple(attrTuple, RelationGetDescr(pg_attribute), diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index b561e17781..a0d6409036 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -52,15 +52,6 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, */ Oid atttypid BKI_LOOKUP_OPT(pg_type); - /* - * attstattarget is the target number of statistics datapoints to collect - * during VACUUM ANALYZE of this column. A zero here indicates that we do - * not wish to collect any stats about this column. A "-1" here indicates - * that no value has been explicitly set for this column, so ANALYZE - * should use the default setting. - */ - int32 attstattarget BKI_DEFAULT(-1); - /* * attlen is a copy of the typlen field from pg_type for this attribute. * See atttypid comments above. @@ -165,7 +156,16 @@ CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75, bool attislocal BKI_DEFAULT(t); /* Number of times inherited from direct parent relation(s) */ - int32 attinhcount BKI_DEFAULT(0); + int16 attinhcount BKI_DEFAULT(0); + + /* + * attstattarget is the target number of statistics datapoints to collect + * during VACUUM ANALYZE of this column. A zero here indicates that we do + * not wish to collect any stats about this column. A "-1" here indicates + * that no value has been explicitly set for this column, so ANALYZE + * should use the default setting. + */ + int16 attstattarget BKI_DEFAULT(-1); /* attribute's collation, if any */ Oid attcollation BKI_LOOKUP_OPT(pg_collation); base-commit: 0b51d423e974557e821d890c0a3a49e419a19caa -- 2.39.2 ^ permalink raw reply [nested|flat] 2+ messages in thread
end of thread, other threads:[~2023-03-20 10:00 UTC | newest] Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-03-17 18:16 [PATCH v16 03/10] Add tests on pg_ls_dir before changing it Justin Pryzby <[email protected]> 2023-03-20 10:00 Save a few bytes in pg_attribute Peter Eisentraut <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox