diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-05-12 00:17:03 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-05-12 00:17:03 +0000 |
commit | d97c9b366273a49f0469184df9dfb3a312b2f3ff (patch) | |
tree | 38e38e6c1d443aa69fb7418a2b0685e10f52de36 /src/backend/optimizer/plan/createplan.c | |
parent | a7c50cd92b17885d926fdf4f0df084849f285d58 (diff) | |
download | postgresql-d97c9b366273a49f0469184df9dfb3a312b2f3ff.tar.gz postgresql-d97c9b366273a49f0469184df9dfb3a312b2f3ff.zip |
Apply fixes for problems with dropped columns whose types have also been
dropped. The simplest fix for INSERT/UPDATE cases turns out to be for
preptlist.c to insert NULLs of a known-good type (I used INT4) rather
than making them match the deleted column's type. Since the representation
of NULL is actually datatype-independent, this should work fine.
I also re-reverted the patch to disable the use_physical_tlist optimization
in the presence of dropped columns. It still doesn't look worth the
trouble to be smarter, if there are no other bugs to fix.
Added a regression test to catch future problems in this area.
Diffstat (limited to 'src/backend/optimizer/plan/createplan.c')
-rw-r--r-- | src/backend/optimizer/plan/createplan.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index e9dd994cd21..f50eb792811 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.141 2003/05/11 20:25:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.142 2003/05/12 00:17:03 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -296,6 +296,12 @@ use_physical_tlist(RelOptInfo *rel) if (rel->reloptkind != RELOPT_BASEREL) return false; /* + * Can't do it if relation contains dropped columns. This is detected + * in plancat.c, see notes there. + */ + if (rel->varlist == NIL) + return false; + /* * Can't do it if any system columns are requested, either. (This could * possibly be fixed but would take some fragile assumptions in setrefs.c, * I think.) |