Note: This release will fail to build with minor releases below 13.10, 14.7 and 15.2. Other major versions are not affected. oracle_fdw binaries built with later minor releases won't load with older PostgreSQL binaries, complaining about undefined symbols.
Keep the PostgreSQL server updated!
Enhancements:
-
Skip Oracle savepoint management if the foreign server option
isolation_levelis set toread_onlyor if we are inside a read-only PostgreSQL transaction. This saves some round trips and avoids Oracle errors that might be thrown when entering a PL/pgSQL exception handler.
Per suggestion from @math-g. -
Use explicit bulk fetching into arrays rather than OCI prefetching for Oracle SELECT statements. This greatly improves performance for LOB and LONG columns, since OCI prefetching didn't work if these data types.
The limitation still applies for SDO_GEOMETRY columns. A new optionlob_prefetchis used to configure how much of the LOBs is fetched with the rows to reduce the number of round trips.
This enhancement was generously sponsored by Mipih (https://www.mipih.fr/).
Thanks for @philflorent for help and testing!
Bugfixes:
-
Inserting CLOBs with the server option
ncharon can lead to the errorORA-24806: LOB form mismatchReport and patch by @jopoly.
-
Don't push down LIMIT with FOR SHARE or FOR UPDATE. That caused the error
ORA-02014: cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.Reported by @intgr.
-
Fix BEFORE UPDATE triggers.
If a BEFORE UPDATE trigger modified a column that was not updated, the changed column was not propagated to Oracle.
Report and diagnosis by @jopoly. -
Don't
free()strings in the environment.
This could lead to crashes and unpredictable behavior. -
Conversions from TIMESTAMP WITH LOCAL TIME ZONE to
timestamp without time zonewere incorrect. To fix, set the Oracle session time zone from the PostgreSQL parametertimezone. Since not all time zones are accepted by all Oracle servers, this must be explicitly enabled by setting theset_timezoneoption on the foreign server.
Thanks to @JamesInform for help with this. -
Make auto_explain work with oracle_fdw. This used to cause an error:
oracleQueryPlan internal error: statement handle is not NULLReport by @Jaisus and @JamesInform. @JamesInform provided the essential clue that the problem is related to auto_explain.
-
Fix "OCI-22061: invalid format text" errors when inserting some numbers with scientific notation into a foreign table.
Report and analysis by @liubeck. -
Support whole-row references in RETURNING clauses.
Report and patch by @jopoly. -
Make generated columns work correctly.
This will fail to build with minor releases below 13.10, 14.7 and 15.2!
Report and original patch by @jopoly.