diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2025-03-16 13:45:48 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2025-03-16 13:45:48 -0400 |
commit | 44890442398cf3a65230d53167e61905d2b0d348 (patch) | |
tree | 1cb9b611315da7ac77b46aef74addc5918cb22d7 /doc/src | |
parent | 682c5be25c28192c56e9d5e2a9ca14673a2fcf4b (diff) | |
download | postgresql-44890442398cf3a65230d53167e61905d2b0d348.tar.gz postgresql-44890442398cf3a65230d53167e61905d2b0d348.zip |
contrib/isn: Make weak mode a GUC setting, and fix related functions.
isn's weak mode used to be a simple static variable, settable only
via the isn_weak(boolean) function. This wasn't optimal, as this
means it doesn't respect transactions nor respond to RESET ALL.
This patch makes isn.weak a GUC parameter instead, so that
it acts like any other user-settable parameter.
The isn_weak() functions are retained for backwards compatibility.
But we must fix their volatility markings: they were marked IMMUTABLE
which is surely incorrect, and PARALLEL RESTRICTED which isn't right
for GUC-related functions either. Mark isn_weak(boolean) as
VOLATILE and PARALLEL UNSAFE, matching set_config(). Mark isn_weak()
as STABLE and PARALLEL SAFE, matching current_setting().
Reported-by: Viktor Holmberg <v@viktorh.net>
Diagnosed-by: Daniel Gustafsson <daniel@yesql.se>
Author: Viktor Holmberg <v@viktorh.net>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/790bc1f9-74dc-4b50-94d2-8147315b1556@Spark
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/isn.sgml | 71 |
1 files changed, 47 insertions, 24 deletions
diff --git a/doc/src/sgml/isn.sgml b/doc/src/sgml/isn.sgml index 45a867d98c2..1f08ada6218 100644 --- a/doc/src/sgml/isn.sgml +++ b/doc/src/sgml/isn.sgml @@ -230,7 +230,7 @@ <para> The <filename>isn</filename> module provides the standard comparison operators, plus B-tree and hash indexing support for all these data types. In - addition there are several specialized functions; shown in <xref linkend="isn-functions"/>. + addition, there are several specialized functions, shown in <xref linkend="isn-functions"/>. In this table, <type>isn</type> means any one of the module's data types. </para> @@ -252,55 +252,78 @@ <tbody> <row> <entry role="func_table_entry"><para role="func_signature"> - <indexterm><primary>isn_weak</primary></indexterm> - <function>isn_weak</function> ( <type>boolean</type> ) - <returnvalue>boolean</returnvalue> + <indexterm><primary>make_valid</primary></indexterm> + <function>make_valid</function> ( <type>isn</type> ) + <returnvalue>isn</returnvalue> </para> <para> - Sets the weak input mode, and returns new setting. + Clears the invalid-check-digit flag of the value. </para></entry> </row> <row> <entry role="func_table_entry"><para role="func_signature"> - <function>isn_weak</function> () + <indexterm><primary>is_valid</primary></indexterm> + <function>is_valid</function> ( <type>isn</type> ) <returnvalue>boolean</returnvalue> </para> <para> - Returns the current status of the weak mode. + Checks for the presence of the invalid-check-digit flag. </para></entry> </row> <row> <entry role="func_table_entry"><para role="func_signature"> - <indexterm><primary>make_valid</primary></indexterm> - <function>make_valid</function> ( <type>isn</type> ) - <returnvalue>isn</returnvalue> + <indexterm><primary>isn_weak</primary></indexterm> + <function>isn_weak</function> ( <type>boolean</type> ) + <returnvalue>boolean</returnvalue> </para> <para> - Validates an invalid number (clears the invalid flag). + Sets the weak input mode, and returns the new setting. + This function is retained for backward compatibility. + The recommended way to set weak mode is via + the <varname>isn.weak</varname> configuration parameter. </para></entry> </row> <row> <entry role="func_table_entry"><para role="func_signature"> - <indexterm><primary>is_valid</primary></indexterm> - <function>is_valid</function> ( <type>isn</type> ) + <function>isn_weak</function> () <returnvalue>boolean</returnvalue> </para> <para> - Checks for the presence of the invalid flag. + Returns the current status of the weak mode. + This function is retained for backward compatibility. + The recommended way to check weak mode is via + the <varname>isn.weak</varname> configuration parameter. </para></entry> </row> </tbody> </tgroup> </table> + </sect2> - <para> - <firstterm>Weak</firstterm> mode is used to be able to insert invalid data - into a table. Invalid means the check digit is wrong, not that there are - missing numbers. - </para> + <sect2 id="isn-configuration-parameters"> + <title>Configuration Parameters</title> + + <variablelist> + <varlistentry id="isn-configuration-parameters-weak"> + <term> + <varname>isn.weak</varname> (<type>boolean</type>) + <indexterm> + <primary><varname>isn.weak</varname> configuration parameter</primary> + </indexterm> + </term> + <listitem> + <para> + <varname>isn.weak</varname> enables the weak input mode, which allows + ISN input values to be accepted even when their check digit is wrong. + The default is <literal>false</literal>, which rejects invalid check + digits. + </para> + </listitem> + </varlistentry> + </variablelist> <para> Why would you want to use the weak mode? Well, it could be that @@ -325,9 +348,9 @@ </para> <para> - You can also force the insertion of invalid numbers even when not in the - weak mode, by appending the <literal>!</literal> character at the end of the - number. + You can also force the insertion of marked-as-invalid numbers even when not + in the weak mode, by appending the <literal>!</literal> character at the + end of the number. </para> <para> @@ -366,11 +389,11 @@ SELECT issn('3251231?'); SELECT ismn('979047213542?'); --Using the weak mode: -SELECT isn_weak(true); +SET isn.weak TO true; INSERT INTO test VALUES('978-0-11-000533-4'); INSERT INTO test VALUES('9780141219307'); INSERT INTO test VALUES('2-205-00876-X'); -SELECT isn_weak(false); +SET isn.weak TO false; SELECT id FROM test WHERE NOT is_valid(id); UPDATE test SET id = make_valid(id) WHERE id = '2-205-00876-X!'; |