Re: cached plan must not change result type - Mailing list pgsql-jdbc

From James Pang
Subject Re: cached plan must not change result type
Date
Msg-id CAHgTRfeXGN9d7vgg8LtwpNYw_+f-zmMYsOc1U9rhXkGcwWtNng@mail.gmail.com
Whole thread Raw
In response to Re: cached plan must not change result type  (James Pang <jamespang886@gmail.com>)
Responses Re: cached plan must not change result type
List pgsql-jdbc

 forwarded to pgjdbc,  we want to understand why JDBC failed to reexecute the SQL instead of throw error out. Like this document https://jdbc.postgresql.org/documentation/server-prepare/#re-execution-of-failed-statements .

 


protected final void execute(CachedQuery cachedQuery,
      @Nullable ParameterList queryParameters, int flags)
      throws SQLException {
    try {
      executeInternal(cachedQuery, queryParameters, flags);
    } catch (SQLException e) {
      // Don't retry composite queries as it might get partially executed
      if (cachedQuery.query.getSubqueries() != null                                 <<< no idea how this  cachedQuery.query.getSubqueries() != null
          || !connection.getQueryExecutor().willHealOnRetry(e)) {
        throw e;
      }
      cachedQuery.query.close();
      // Execute the query one more time
      executeInternal(cachedQuery, queryParameters, flags);
    }
  }

cachedQuery.query.getSubqueries() != null, how this code decide composite queries  here ?   that mean some query having subquery or having many JOIN or LEFT JOINs like  select .... A left join B ...

Thanks,

James 

James Pang <jamespang886@gmail.com> 於 2024年3月29日週五 下午4:56寫道:

Thanks Laurenz,  forwarded to pgjdbc,  we want to understand why JDBC failed to reexecute the SQL instead of throw error out. Like this document https://jdbc.postgresql.org/documentation/server-prepare/#re-execution-of-failed-statements .

 

Thanks,

 

James 


Laurenz Albe <laurenz.albe@cybertec.at> 於 2024年3月29日週五 下午4:40寫道:
On Fri, 2024-03-29 at 10:05 +0800, James Pang wrote:
> PGV14, client use PGJDBC driver and prepared statements, when a table
> "alter table alter column type ..." changes done, a lot of JDBC clients
> got this error "cached plan must not change result type".  when a JDBC
> client got this error first time after the DDL schema change, JDBC driver
> will clear this caching-plan and following same SQL statement got parsing
> again and new cached plan right?

Not sure; what do you observe?
Anyway, this is a known problem:
https://jdbc.postgresql.org/documentation/server-prepare/#ddl

> How to avoid this issue when DDL schema changes ?

Don't use server-side prepared statements:
https://jdbc.postgresql.org/documentation/server-prepare/#deactivation
You'll lose some performance though.

Questions like this had better be asked on the pgsql-jdbc list.

Yours,
Laurenz Albe

pgsql-jdbc by date:

Previous
From: James Pang
Date:
Subject: Re: cached plan must not change result type
Next
From: Dave Cramer
Date:
Subject: Re: cached plan must not change result type