<xref linkend="sql-explain"/> can be used to see whether
<acronym>JIT</acronym> is used or not. As an example, here is a query that
is not using <acronym>JIT</acronym>:
- <programlisting>
+<screen>
=# EXPLAIN ANALYZE SELECT SUM(relpages) FROM pg_class;
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ QUERY PLAN │
│ Execution Time: 0.365 ms │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
(4 rows)
- </programlisting>
+</screen>
Given the cost of the plan, it is entirely reasonable that no
<acronym>JIT</acronym> was used, the cost of <acronym>JIT</acronym> would
have been bigger than the savings. Adjusting the cost limits will lead to
<acronym>JIT</acronym> use:
- <programlisting>
+<screen>
=# SET jit_above_cost = 10;
SET
=# EXPLAIN ANALYZE SELECT SUM(relpages) FROM pg_class;
│ Emission Time: 5.048 ms │
│ Execution Time: 7.416 ms │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
- </programlisting>
+</screen>
As visible here, <acronym>JIT</acronym> was used, but inlining and
expensive optimization were not. If <xref
linkend="guc-jit-optimize-above-cost"/>, <xref
<function>_PG_jit_provider_init</function>. This function is passed a
struct that needs to be filled with the callback function pointers for
individual actions.
- <programlisting>
+<programlisting>
struct JitProviderCallbacks
{
JitProviderResetAfterErrorCB reset_after_error;
JitProviderCompileExprCB compile_expr;
};
extern void _PG_jit_provider_init(JitProviderCallbacks *cb);
- </programlisting>
+</programlisting>
</para>
</sect3>
</sect2>
</para>
<para>
Examples:
- <screen>
- select websearch_to_tsquery('english', 'The fat rats');
+<screen>
+SELECT websearch_to_tsquery('english', 'The fat rats');
+ websearch_to_tsquery
+----------------------
+ 'fat' & 'rat'
+(1 row)
+
+SELECT websearch_to_tsquery('english', '"supernovae stars" -crab');
websearch_to_tsquery
- -----------------
- 'fat' & 'rat'
- (1 row)
- </screen>
- <screen>
- select websearch_to_tsquery('english', '"supernovae stars" -crab');
- websearch_to_tsquery
- ----------------------------------
- 'supernova' <-> 'star' & !'crab'
- (1 row)
- </screen>
- <screen>
- select websearch_to_tsquery('english', '"sad cat" or "fat rat"');
- websearch_to_tsquery
- -----------------------------------
- 'sad' <-> 'cat' | 'fat' <-> 'rat'
- (1 row)
- </screen>
- <screen>
- select websearch_to_tsquery('english', 'signal -"segmentation fault"');
- websearch_to_tsquery
- ---------------------------------------
- 'signal' & !( 'segment' <-> 'fault' )
- (1 row)
- </screen>
- <screen>
- select websearch_to_tsquery('english', '""" )( dummy \\ query <->');
+----------------------------------
+ 'supernova' <-> 'star' & !'crab'
+(1 row)
+
+SELECT websearch_to_tsquery('english', '"sad cat" or "fat rat"');
websearch_to_tsquery
- ----------------------
- 'dummi' & 'queri'
- (1 row)
- </screen>
+-----------------------------------
+ 'sad' <-> 'cat' | 'fat' <-> 'rat'
+(1 row)
+
+SELECT websearch_to_tsquery('english', 'signal -"segmentation fault"');
+ websearch_to_tsquery
+---------------------------------------
+ 'signal' & !( 'segment' <-> 'fault' )
+(1 row)
+
+SELECT websearch_to_tsquery('english', '""" )( dummy \\ query <->');
+ websearch_to_tsquery
+----------------------
+ 'dummi' & 'queri'
+(1 row)
+</screen>
</para>
</sect2>