public inbox for [email protected]  
help / color / mirror / Atom feed
[PATCH 1/1] resownerbench
2+ messages / 2 participants
[nested] [flat]

* [PATCH 1/1] resownerbench
@ 2020-11-11 22:40 Heikki Linnakangas <[email protected]>
  0 siblings, 0 replies; 2+ messages in thread

From: Heikki Linnakangas @ 2020-11-11 22:40 UTC (permalink / raw)

---
 contrib/resownerbench/Makefile               |  17 ++
 contrib/resownerbench/resownerbench--1.0.sql |  14 ++
 contrib/resownerbench/resownerbench.c        | 154 +++++++++++++++++++
 contrib/resownerbench/resownerbench.control  |   6 +
 contrib/resownerbench/snaptest.sql           |  37 +++++
 5 files changed, 228 insertions(+)
 create mode 100644 contrib/resownerbench/Makefile
 create mode 100644 contrib/resownerbench/resownerbench--1.0.sql
 create mode 100644 contrib/resownerbench/resownerbench.c
 create mode 100644 contrib/resownerbench/resownerbench.control
 create mode 100644 contrib/resownerbench/snaptest.sql

diff --git a/contrib/resownerbench/Makefile b/contrib/resownerbench/Makefile
new file mode 100644
index 00000000000..9b0e1cfee1a
--- /dev/null
+++ b/contrib/resownerbench/Makefile
@@ -0,0 +1,17 @@
+MODULE_big = resownerbench
+OBJS = resownerbench.o
+
+EXTENSION = resownerbench
+DATA = resownerbench--1.0.sql
+PGFILEDESC = "resownerbench - benchmark for ResourceOwners"
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = contrib/resownerbench
+top_builddir = ../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/contrib/resownerbench/resownerbench--1.0.sql b/contrib/resownerbench/resownerbench--1.0.sql
new file mode 100644
index 00000000000..d29182f5982
--- /dev/null
+++ b/contrib/resownerbench/resownerbench--1.0.sql
@@ -0,0 +1,14 @@
+/* contrib/resownerbench/resownerbench--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION resownerbench" to load this file. \quit
+
+CREATE FUNCTION snapshotbench_lifo(numkeep int, numsnaps int, numiters int)
+RETURNS double precision
+AS 'MODULE_PATHNAME', 'snapshotbench_lifo'
+LANGUAGE C STRICT VOLATILE;
+
+CREATE FUNCTION snapshotbench_fifo(numkeep int, numsnaps int, numiters int)
+RETURNS double precision
+AS 'MODULE_PATHNAME', 'snapshotbench_fifo'
+LANGUAGE C STRICT VOLATILE;
diff --git a/contrib/resownerbench/resownerbench.c b/contrib/resownerbench/resownerbench.c
new file mode 100644
index 00000000000..acfb6c39199
--- /dev/null
+++ b/contrib/resownerbench/resownerbench.c
@@ -0,0 +1,154 @@
+#include "postgres.h"
+
+#include "catalog/pg_type.h"
+#include "catalog/pg_statistic.h"
+#include "executor/spi.h"
+#include "funcapi.h"
+#include "libpq/pqsignal.h"
+#include "utils/catcache.h"
+#include "utils/syscache.h"
+#include "utils/timestamp.h"
+#include "utils/snapmgr.h"
+
+PG_MODULE_MAGIC;
+
+PG_FUNCTION_INFO_V1(snapshotbench_lifo);
+PG_FUNCTION_INFO_V1(snapshotbench_fifo);
+
+/*
+ * ResourceOwner Performance test, using RegisterSnapshot().
+ *
+ * This takes three parameters: numkeep, numsnaps, numiters.
+ *
+ * First, we register 'numkeep' snapshots. They are kept registed
+ * until the end of the test. Then, we repeatedly register and
+ * unregister 'numsnaps - numkeep' additional snapshots, repeating
+ * 'numiters' times. All the register/unregister calls are made in
+ * LIFO order.
+ *
+ * Returns the time spent, in milliseconds.
+ *
+ * The idea is to test the performance of ResourceOwnerRemember()
+ * and ReourceOwnerForget() operations, under different regimes.
+ *
+ * In the old implementation, if 'numsnaps' is small enough, all
+ * the entries fit in the resource owner's small array (it can
+ * hold 64 entries).
+ *
+ * In the new implementation, the array is much smaller, only 8
+ * entries, but it's used together with the hash table so that
+ * we stay in the "array regime" as long as 'numsnaps - numkeep'
+ * is smaller than 8 entries.
+ *
+ * 'numiters' can be adjusted to adjust the overall runtime to be
+ * suitable long.
+ */
+Datum
+snapshotbench_lifo(PG_FUNCTION_ARGS)
+{
+	int			numkeep = PG_GETARG_INT32(0);
+	int			numsnaps = PG_GETARG_INT32(1);
+	int			numiters = PG_GETARG_INT32(2);
+	int			i;
+	instr_time	start,
+				duration;
+	Snapshot	lsnap;
+	Snapshot   *rs;
+	int			numregistered = 0;
+
+	rs = palloc(Max(numsnaps, numkeep) * sizeof(Snapshot));
+
+	lsnap = GetLatestSnapshot();
+
+	PG_SETMASK(&BlockSig);
+	INSTR_TIME_SET_CURRENT(start);
+
+	while (numregistered < numkeep)
+	{
+		rs[numregistered] = RegisterSnapshot(lsnap);
+		numregistered++;
+	}
+
+	for (i = 0 ; i < numiters; i++)
+	{
+		while (numregistered < numsnaps)
+		{
+			rs[numregistered] = RegisterSnapshot(lsnap);
+			numregistered++;
+		}
+
+		while (numregistered > numkeep)
+		{
+			numregistered--;
+			UnregisterSnapshot(rs[numregistered]);
+		}
+	}
+
+	while (numregistered > 0)
+	{
+		numregistered--;
+		UnregisterSnapshot(rs[numregistered]);
+	}
+
+	INSTR_TIME_SET_CURRENT(duration);
+	INSTR_TIME_SUBTRACT(duration, start);
+	PG_SETMASK(&UnBlockSig);
+
+	PG_RETURN_FLOAT8(INSTR_TIME_GET_MILLISEC(duration));
+};
+
+
+/*
+ * Same, but do the register/unregister operations in
+ * FIFO order.
+ */
+Datum
+snapshotbench_fifo(PG_FUNCTION_ARGS)
+{
+	int			numkeep = PG_GETARG_INT32(0);
+	int			numsnaps = PG_GETARG_INT32(1);
+	int			numiters = PG_GETARG_INT32(2);
+	int			i,
+				j;
+	instr_time	start,
+				duration;
+	Snapshot	lsnap;
+	Snapshot   *rs;
+	int			numregistered = 0;
+
+	rs = palloc(Max(numsnaps, numkeep) * sizeof(Snapshot));
+
+	lsnap = GetLatestSnapshot();
+
+	PG_SETMASK(&BlockSig);
+	INSTR_TIME_SET_CURRENT(start);
+
+	while (numregistered < numkeep)
+	{
+		rs[numregistered] = RegisterSnapshot(lsnap);
+		numregistered++;
+	}
+
+	for (i = 0 ; i < numiters; i++)
+	{
+		while (numregistered < numsnaps)
+		{
+			rs[numregistered] = RegisterSnapshot(lsnap);
+			numregistered++;
+		}
+
+		for (j = numkeep; j < numregistered; j++)
+			UnregisterSnapshot(rs[j]);
+		numregistered = numkeep;
+	}
+
+	for (j = 0; j < numregistered; j++)
+		UnregisterSnapshot(rs[j]);
+	numregistered = numkeep;
+
+	INSTR_TIME_SET_CURRENT(duration);
+	INSTR_TIME_SUBTRACT(duration, start);
+	PG_SETMASK(&UnBlockSig);
+
+	PG_RETURN_FLOAT8(INSTR_TIME_GET_MILLISEC(duration));
+};
diff --git a/contrib/resownerbench/resownerbench.control b/contrib/resownerbench/resownerbench.control
new file mode 100644
index 00000000000..ada88b8eed8
--- /dev/null
+++ b/contrib/resownerbench/resownerbench.control
@@ -0,0 +1,6 @@
+# resownerbench
+
+comment = 'benchmark for ResourceOwners'
+default_version = '1.0'
+module_pathname = '$libdir/resownerbench'
+relocatable = true
diff --git a/contrib/resownerbench/snaptest.sql b/contrib/resownerbench/snaptest.sql
new file mode 100644
index 00000000000..18c54e13fc9
--- /dev/null
+++ b/contrib/resownerbench/snaptest.sql
@@ -0,0 +1,37 @@
+--
+-- Performance test RegisterSnapshot/UnregisterSnapshot.
+--
+select numkeep, numsnaps,
+       -- numiters,
+       -- round(lifo_time_ms) as lifo_total_time_ms,
+       -- round(fifo_time_ms) as fifo_total_time_ms,
+       round((lifo_time_ms::numeric / (numkeep + (numsnaps - numkeep) * numiters)) * 1000000, 1) as lifo_time_ns,
+       round((fifo_time_ms::numeric / (numkeep + (numsnaps - numkeep) * numiters)) * 1000000, 1) as fifo_time_ns
+from
+(values (0,      1,  10000000),
+        (0,      5,   2000000),
+        (0,     10,   1000000),
+        (0,     60,    100000),
+        (0,     70,    100000),
+        (0,    100,    100000),
+        (0,   1000,     10000),
+        (0,  10000,      1000),
+
+-- These tests keep 9 snapshots registered across the iterations. That
+-- exceeds the size of the little array in the patch, so this exercises
+-- the hash lookups. Without the patch, these still fit in the array
+-- (it's 64 entries without the patch)
+        (9,     10,  10000000),
+        (9,    100,    100000),
+        (9,   1000,     10000),
+        (9,  10000,      1000),
+
+-- These exceed the 64 entry array even without the patch, so these fall
+-- in the hash table regime with and without the patch.
+        (65,    70,   1000000),
+        (65,   100,    100000),
+        (65,  1000,     10000),
+        (65, 10000,      1000)
+) AS params (numkeep, numsnaps, numiters),
+lateral snapshotbench_lifo(numkeep, numsnaps, numiters) as lifo_time_ms,
+lateral snapshotbench_fifo(numkeep, numsnaps, numiters) as fifo_time_ms;
-- 
2.29.2


--------------1104342304EC6341F5D7C60C--





^ permalink  raw  reply  [nested|flat] 2+ messages in thread

* collation settings table in v16 docs
@ 2023-06-05 02:31 Jeremy Schneider <[email protected]>
  0 siblings, 0 replies; 2+ messages in thread

From: Jeremy Schneider @ 2023-06-05 02:31 UTC (permalink / raw)
  To: Davis, Jeff <[email protected]>; Peter Eisentraut <[email protected]>; Jonathan S. Katz <[email protected]>; Robert Haas <[email protected]>; +Cc: pgsql-hackers

Looking at the "collation settings" table in the v16 docs, I think some
readers may have a little difficulty understanding what each row means.

https://www.postgresql.org/docs/devel/collation.html#ICU-COLLATION-SETTINGS

The "Key" column isn't meaningful and it's a bit arduous to read the
whole description column for every row in the table, just to understand
which keys I might be interested in.

I like how Peter's recent blog used the alias to organize the keys.

http://peter.eisentraut.org/blog/2023/05/16/overview-of-icu-collation-settings

I'd suggest that we add a column to this table with the alias, and also
have a consistent first sentence of each description, generally aligned
with the description from the upstream XML that Peter also referenced in
his blog.

I have an example below (and patch attached); I think this would make
the table a bit more understandable.

-Jeremy


===

Key: ka
Alias: colAlternate **<-added**
Values: noignore, shifted
Default: noignore
Description: **Collation parameter key for alternate handling.** If set
to shifted, causes some characters (e.g. punctuation or space) to be
ignored in comparison. Key ks must be set to level3 or lower to take
effect. Set key kv to control which character classes are ignored.

===

Key: kb
Alias: colBackwards **<-added**
Values: true, false
Default: false
Description: **Collation parameter key for backwards comparison of** the
level 2 differences. For example, locale und-u-kb sorts 'àe' before 'aé'.



-- 
http://about.me/jeremy_schneider
diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml
index ed84465996..5f81afdb85 100644
--- a/doc/src/sgml/charset.sgml
+++ b/doc/src/sgml/charset.sgml
@@ -1269,10 +1269,12 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
        <colspec colname="col1" colwidth="1*"/>
        <colspec colname="col2" colwidth="2*"/>
        <colspec colname="col3" colwidth="2*"/>
-       <colspec colname="col4" colwidth="5*"/>
+       <colspec colname="col4" colwidth="2*"/>
+       <colspec colname="col5" colwidth="5*"/>
        <thead>
         <row>
          <entry>Key</entry>
+         <entry>Alias</entry>
          <entry>Values</entry>
          <entry>Default</entry>
          <entry>Description</entry>
@@ -1281,6 +1283,7 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
        <tbody>
         <row>
          <entry><literal>co</literal></entry>
+         <entry></entry>
          <entry><literal>emoji</literal>, <literal>phonebk</literal>, <literal>standard</literal>, <replaceable>...</replaceable></entry>
          <entry><literal>standard</literal></entry>
          <entry>
@@ -1289,9 +1292,11 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>ka</literal></entry>
+         <entry><literal>colAlternate</literal></entry>
          <entry><literal>noignore</literal>, <literal>shifted</literal></entry>
          <entry><literal>noignore</literal></entry>
          <entry>
+          Collation parameter key for alternate handling.
           If set to <literal>shifted</literal>, causes some characters
           (e.g. punctuation or space) to be ignored in comparison. Key
           <literal>ks</literal> must be set to <literal>level3</literal> or
@@ -1301,20 +1306,24 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kb</literal></entry>
+         <entry><literal>colBackwards</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
-          Backwards comparison for the level 2 differences. For example,
+          Collation parameter key for
+          backwards comparison of the level 2 differences. For example,
           locale <literal>und-u-kb</literal> sorts <literal>'àe'</literal>
           before <literal>'aé'</literal>.
          </entry>
         </row>
         <row>
          <entry><literal>kc</literal></entry>
+         <entry><literal>colCaseLevel</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
           <para>
+           Collation parameter key for case level.
            Separates case into a "level 2.5" that falls between accents and
            other level 3 features.
           </para>
@@ -1327,12 +1336,14 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kf</literal></entry>
+         <entry><literal>colCaseFirst</literal></entry>
          <entry>
           <literal>upper</literal>, <literal>lower</literal>,
           <literal>false</literal>
          </entry>
          <entry><literal>false</literal></entry>
          <entry>
+          Collation parameter key for ordering by case.
           If set to <literal>upper</literal>, upper case sorts before lower
           case. If set to <literal>lower</literal>, lower case sorts before
           upper case. If set to <literal>false</literal>, the sort depends on
@@ -1341,9 +1352,11 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kn</literal></entry>
+         <entry><literal>colNumeric</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
+          Collation parameter key for numeric handling.
           If set to <literal>true</literal>, numbers within a string are
           treated as a single numeric value rather than a sequence of
           digits. For example, <literal>'id-45'</literal> sorts before
@@ -1352,11 +1365,13 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kk</literal></entry>
+         <entry><literal>colNormalization</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
           <para>
-           Enable full normalization; may affect performance. Basic
+           Collation parameter key for
+           full normalization; may affect performance. Basic
            normalization is performed even when set to
            <literal>false</literal>. Locales for languages that require full
            normalization typically enable it by default.
@@ -1375,6 +1390,7 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kr</literal></entry>
+         <entry><literal>colReorder</literal></entry>
          <entry>
           <literal>space</literal>, <literal>punct</literal>,
           <literal>symbol</literal>, <literal>currency</literal>,
@@ -1383,6 +1399,7 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
          <entry></entry>
          <entry>
           <para>
+           Collation reorder codes.
            Set to one or more of the valid values, or any BCP 47
            <replaceable>script-id</replaceable>, e.g. <literal>latn</literal>
            ("Latin") or <literal>grek</literal> ("Greek"). Multiple values are
@@ -1400,9 +1417,11 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>ks</literal></entry>
+         <entry><literal>colStrength</literal></entry>
          <entry><literal>level1</literal>, <literal>level2</literal>, <literal>level3</literal>, <literal>level4</literal>, <literal>identic</literal></entry>
          <entry><literal>level3</literal></entry>
          <entry>
+          Collation parameter key for collation strength.
           Sensitivity (or "strength") when determining equality, with
           <literal>level1</literal> the least sensitive to differences and
           <literal>identic</literal> the most sensitive to differences. See
@@ -1411,13 +1430,16 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kv</literal></entry>
+         <entry><literal>maxVariable</literal></entry>
          <entry>
           <literal>space</literal>, <literal>punct</literal>,
           <literal>symbol</literal>, <literal>currency</literal>
          </entry>
          <entry><literal>punct</literal></entry>
          <entry>
-          Classes of characters ignored during comparison at level 3. Setting
+          Collation parameter key for maxVariable, the last reordering group
+          to be affected by ka-shifted. This determines
+          classes of characters ignored during comparison at level 3. Setting
           to a later value includes earlier values;
           e.g. <literal>symbol</literal> also includes
           <literal>punct</literal> and <literal>space</literal> in the


Attachments:

  [text/plain] 01-doc-update-proposal.patch (7.1K, ../../[email protected]/2-01-doc-update-proposal.patch)
  download | inline diff:
diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml
index ed84465996..5f81afdb85 100644
--- a/doc/src/sgml/charset.sgml
+++ b/doc/src/sgml/charset.sgml
@@ -1269,10 +1269,12 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
        <colspec colname="col1" colwidth="1*"/>
        <colspec colname="col2" colwidth="2*"/>
        <colspec colname="col3" colwidth="2*"/>
-       <colspec colname="col4" colwidth="5*"/>
+       <colspec colname="col4" colwidth="2*"/>
+       <colspec colname="col5" colwidth="5*"/>
        <thead>
         <row>
          <entry>Key</entry>
+         <entry>Alias</entry>
          <entry>Values</entry>
          <entry>Default</entry>
          <entry>Description</entry>
@@ -1281,6 +1283,7 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
        <tbody>
         <row>
          <entry><literal>co</literal></entry>
+         <entry></entry>
          <entry><literal>emoji</literal>, <literal>phonebk</literal>, <literal>standard</literal>, <replaceable>...</replaceable></entry>
          <entry><literal>standard</literal></entry>
          <entry>
@@ -1289,9 +1292,11 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>ka</literal></entry>
+         <entry><literal>colAlternate</literal></entry>
          <entry><literal>noignore</literal>, <literal>shifted</literal></entry>
          <entry><literal>noignore</literal></entry>
          <entry>
+          Collation parameter key for alternate handling.
           If set to <literal>shifted</literal>, causes some characters
           (e.g. punctuation or space) to be ignored in comparison. Key
           <literal>ks</literal> must be set to <literal>level3</literal> or
@@ -1301,20 +1306,24 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kb</literal></entry>
+         <entry><literal>colBackwards</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
-          Backwards comparison for the level 2 differences. For example,
+          Collation parameter key for
+          backwards comparison of the level 2 differences. For example,
           locale <literal>und-u-kb</literal> sorts <literal>'àe'</literal>
           before <literal>'aé'</literal>.
          </entry>
         </row>
         <row>
          <entry><literal>kc</literal></entry>
+         <entry><literal>colCaseLevel</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
           <para>
+           Collation parameter key for case level.
            Separates case into a "level 2.5" that falls between accents and
            other level 3 features.
           </para>
@@ -1327,12 +1336,14 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kf</literal></entry>
+         <entry><literal>colCaseFirst</literal></entry>
          <entry>
           <literal>upper</literal>, <literal>lower</literal>,
           <literal>false</literal>
          </entry>
          <entry><literal>false</literal></entry>
          <entry>
+          Collation parameter key for ordering by case.
           If set to <literal>upper</literal>, upper case sorts before lower
           case. If set to <literal>lower</literal>, lower case sorts before
           upper case. If set to <literal>false</literal>, the sort depends on
@@ -1341,9 +1352,11 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kn</literal></entry>
+         <entry><literal>colNumeric</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
+          Collation parameter key for numeric handling.
           If set to <literal>true</literal>, numbers within a string are
           treated as a single numeric value rather than a sequence of
           digits. For example, <literal>'id-45'</literal> sorts before
@@ -1352,11 +1365,13 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kk</literal></entry>
+         <entry><literal>colNormalization</literal></entry>
          <entry><literal>true</literal>, <literal>false</literal></entry>
          <entry><literal>false</literal></entry>
          <entry>
           <para>
-           Enable full normalization; may affect performance. Basic
+           Collation parameter key for
+           full normalization; may affect performance. Basic
            normalization is performed even when set to
            <literal>false</literal>. Locales for languages that require full
            normalization typically enable it by default.
@@ -1375,6 +1390,7 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kr</literal></entry>
+         <entry><literal>colReorder</literal></entry>
          <entry>
           <literal>space</literal>, <literal>punct</literal>,
           <literal>symbol</literal>, <literal>currency</literal>,
@@ -1383,6 +1399,7 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
          <entry></entry>
          <entry>
           <para>
+           Collation reorder codes.
            Set to one or more of the valid values, or any BCP 47
            <replaceable>script-id</replaceable>, e.g. <literal>latn</literal>
            ("Latin") or <literal>grek</literal> ("Greek"). Multiple values are
@@ -1400,9 +1417,11 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>ks</literal></entry>
+         <entry><literal>colStrength</literal></entry>
          <entry><literal>level1</literal>, <literal>level2</literal>, <literal>level3</literal>, <literal>level4</literal>, <literal>identic</literal></entry>
          <entry><literal>level3</literal></entry>
          <entry>
+          Collation parameter key for collation strength.
           Sensitivity (or "strength") when determining equality, with
           <literal>level1</literal> the least sensitive to differences and
           <literal>identic</literal> the most sensitive to differences. See
@@ -1411,13 +1430,16 @@ SELECT 'x-y' = 'x_y' COLLATE level4; -- false
         </row>
         <row>
          <entry><literal>kv</literal></entry>
+         <entry><literal>maxVariable</literal></entry>
          <entry>
           <literal>space</literal>, <literal>punct</literal>,
           <literal>symbol</literal>, <literal>currency</literal>
          </entry>
          <entry><literal>punct</literal></entry>
          <entry>
-          Classes of characters ignored during comparison at level 3. Setting
+          Collation parameter key for maxVariable, the last reordering group
+          to be affected by ka-shifted. This determines
+          classes of characters ignored during comparison at level 3. Setting
           to a later value includes earlier values;
           e.g. <literal>symbol</literal> also includes
           <literal>punct</literal> and <literal>space</literal> in the


^ permalink  raw  reply  [nested|flat] 2+ messages in thread


end of thread, other threads:[~2023-06-05 02:31 UTC | newest]

Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-11-11 22:40 [PATCH 1/1] resownerbench Heikki Linnakangas <[email protected]>
2023-06-05 02:31 collation settings table in v16 docs Jeremy Schneider <[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