BUG #11402: Prepared statement cache invalidation and unknown types

From: marko(at)joh(dot)to
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #11402: Prepared statement cache invalidation and unknown types
Date: 2014-09-11 21:58:05
Message-ID: 20140911215805.2484.10673@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 11402
Logged by: Marko Tiikkaja
Email address: marko(at)joh(dot)to
PostgreSQL version: 9.4beta2
Operating system: Any
Description:

Hi,

This might have been reported before, but I hit this quite horrible
behaviour with prepared statements this week. Observeth:

local:marko=# create table foo(a int);
CREATE TABLE
local:marko=#* prepare qwr(unknown) as select * from foo where a = $1;
PREPARE
local:marko=#* execute qwr('1');
a
---
(0 rows)

local:marko=#* alter table foo alter column a type text;
ALTER TABLE
local:marko=#* execute qwr('1');
ERROR: operator does not exist: text = integer
HINT: No operator matches the given name and argument type(s). You might
need to add explicit type casts.

I hit the behaviour on 9.1 originally with functions, but tested it against
a reasonably fresh HEAD and it was still broken. Somehow it seems that the
prepared statement isn't willing to forget the data type of the argument
after it has been resolved once (even though it was specified to be unknown
:-( ). This leads to some grotesque cache invalidation code in our API.

If this has been discussed before and has been decided to not be worth
fixing, feel free to call me names, but I just thought I'd bring it to your
attention before I forget again.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Roman Konoval 2014-09-11 22:07:15 Memory leak during delete with sequential scan
Previous Message natan 2014-09-11 21:27:06 BUG #11401: When I comparison geting of field returns false, but when I do directly with result returns true