| From: | PG Bug reporting form <noreply(at)postgresql(dot)org> |
|---|---|
| To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Cc: | zeroimpl(at)gmail(dot)com |
| Subject: | BUG #15913: Could not open relation with oid on PL/pgSQL method referencing temporary table that got recreated |
| Date: | 2019-07-16 17:49:14 |
| Message-ID: | 15913-a7e112e16dedcffc@postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 15913
Logged by: Daniel Fiori
Email address: zeroimpl(at)gmail(dot)com
PostgreSQL version: 11.4
Operating system: Debian 11.4-1.pgdg90+1
Description:
I have some SQL which works fine in 9.x and 10.x, but fails in 11.x and 12.x
(I tested on various Docker images).
One of the functions declares a variable whose type matches a temporary
table. If I drop and recreate that temporary table twice in the same
session, I get an error like: "ERROR: could not open relation with OID
xxx". This occurs on the second call to the DoSomething() function after the
temporary table has been recreated.
---
BEGIN;
CREATE OR REPLACE FUNCTION BeginTest( arg TEXT ) RETURNS VOID AS $$
BEGIN
CREATE TEMPORARY TABLE TestVal AS SELECT arg;
END
$$ LANGUAGE PLPGSQL;
SELECT BeginTest( NULL );
CREATE OR REPLACE FUNCTION EndTest() RETURNS VOID AS $$
BEGIN
DROP TABLE TestVal;
END
$$ LANGUAGE PLPGSQL;
CREATE OR REPLACE FUNCTION DoSomething() RETURNS VOID AS $$
DECLARE
varname TestVal;
BEGIN
SELECT * INTO varname FROM TestVal;
END
$$ LANGUAGE PLPGSQL;
SELECT EndTest();
COMMIT;
---
Then in a different session run:
---
BEGIN;
SELECT BeginTest( 'abc' );
SELECT DoSomething();
SELECT EndTest();
SELECT BeginTest( 'def' );
SELECT DoSomething();
SELECT EndTest();
COMMIT;
---
Note if the above SQL is all run in the same session, a slightly different
error is reported: "ERROR: type with OID xxx does not exist"
Based on the PG 11 release notes, it sounds like it's related to this
change:
> Allow PL/pgSQL to handle changes to composite types (e.g. record, row)
that happen between the first and later function executions in the same
session (Tom Lane). Previously, such circumstances generated errors.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2019-07-16 18:10:42 | Re: BUG #15911: Why no Bcrypt in pg_hba.conf? |
| Previous Message | Andrew Gierth | 2019-07-16 17:36:54 | Re: BUG #15911: Why no Bcrypt in pg_hba.conf? |