Thread: prepare-alter-exec issue
I encounter a server(8.1.1) problem like this: create table tt(id int); prepare p1(int) as insert into tt values($1); execute p1(3); alter table tt alter id type char(10); execute p1(9999999); select * from tt; ^ server core dumps here Command "execute p1(9999999)" works because the prepared plan still treat 9999999 as an integer, but "select * from tt" causes core dump because it treats the attribute as type varlena char - so 9999999 becomes the varlen. This might be a known issue, but seems not mentioned in the document: http://www.postgresql.org/docs/current/static/sql-prepare.html Regards, Qingqing
The same bug was filed already in the end of Nov. There are two ways to fix this. 1) After altering the table, prepare buffer should be cleared or 2) The prepare stmt should be updated whenever alter query is executed. I hope that this bug will be fixed in the next version.. Regards Dhanaraj Qingqing Zhou wrote: > I encounter a server(8.1.1) problem like this: > > create table tt(id int); > prepare p1(int) as insert into tt values($1); > execute p1(3); > alter table tt alter id type char(10); > execute p1(9999999); > select * from tt; > ^ server core dumps here > > Command "execute p1(9999999)" works because the prepared plan still treat > 9999999 as an integer, but "select * from tt" causes core dump because it > treats the attribute as type varlena char - so 9999999 becomes the varlen. > > This might be a known issue, but seems not mentioned in the document: > http://www.postgresql.org/docs/current/static/sql-prepare.html > > > Regards, > Qingqing > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: Don't 'kill -9' the postmaster >
Added to TODO: * Invalidate prepared queries, like INSERT, when the table definition is altered --------------------------------------------------------------------------- Dhanaraj wrote: > The same bug was filed already in the end of Nov. > > There are two ways to fix this. > > 1) After altering the table, prepare buffer should be cleared > or > 2) The prepare stmt should be updated whenever alter query is executed. > > I hope that this bug will be fixed in the next version.. > > Regards > Dhanaraj > Qingqing Zhou wrote: > > I encounter a server(8.1.1) problem like this: > > > > create table tt(id int); > > prepare p1(int) as insert into tt values($1); > > execute p1(3); > > alter table tt alter id type char(10); > > execute p1(9999999); > > select * from tt; > > ^ server core dumps here > > > > Command "execute p1(9999999)" works because the prepared plan still treat > > 9999999 as an integer, but "select * from tt" causes core dump because it > > treats the attribute as type varlena char - so 9999999 becomes the varlen. > > > > This might be a known issue, but seems not mentioned in the document: > > http://www.postgresql.org/docs/current/static/sql-prepare.html > > > > > > Regards, > > Qingqing > > > > > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 2: Don't 'kill -9' the postmaster > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Have you searched our list archives? > > http://archives.postgresql.org > -- Bruce Momjian http://candle.pha.pa.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +