From: | Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | Hiroshi Inoue <Inoue(at)tpf(dot)co(dot)jp> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgreSQL(dot)org> |
Subject: | Re: [HACKERS] double opens |
Date: | 1999-07-28 15:42:30 |
Message-ID: | 199907281542.LAA11081@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
[Charset iso-8859-1 unsupported, filtering to ASCII...]
> Hi all,
>
> There is a TODO item
> * Overhaul mdmgr/smgr to fix double unlinking and double opens, cleanup
>
> In Windows-NT,we could see the following error reported by
> yutaka tanida [yutaka(at)marin(dot)or(dot)jp](dot)
>
> > version
> > ------------------------------------------------------------
> > PostgreSQL 6.5.1 on i686-pc-cygwin, compiled by gcc gcc-2.95
> > (1 row)
> >
> > template1=> create table table1 ( i int,j int);
> > CREATE
> > template1=> create view view1 as select * from table1;
> > CREATE
> > template1=> drop view view1;
> > DROP
> > template1=> create view view1 as select * from table1;
> > ERROR: cannot create view1
>
> "drop view" couldn't unlink the base file of target view because
> it is doubly opened and so "create view" coundn't create the view.
>
> After applying the following patch on trial,"drop view" was able to
> unlink the base file and "create view" was able to create the view
> again.
>
> I think base files should be closed at the time of cache invalidation.
> RelationFlushRelation() invalidates the entry of relation cache but
> doesn't close the base file of target relation.
> Is there any reason ?
>
> Or why doesn't RelationCacheDelete() close the base file of
> target relation ?
>
> Regards.
>
> Hiroshi Inoue
> Inoue(at)tpf(dot)co(dot)jp
>
> *** utils/cache/relcache.c.orig Wed May 26 16:05:38 1999
> --- utils/cache/relcache.c Wed Jul 28 13:23:49 1999
> ***************
> *** 1282,1287 ****
> --- 1282,1288 ----
> oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt);
>
> RelationCacheDelete(relation);
> + smgrclose(DEFAULT_SMGR, relation);
>
> FreeTupleDesc(relation->rd_att);
> SystemCacheRelationFlushed(RelationGetRelid(relation));
>
>
>
Basically, I thought the close was done already in the drop table code.
Is it strange to do the close inside the cache? The cache does the
opens, right?
--
Bruce Momjian | http://www.op.net/~candle
maillist(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 1999-07-28 15:43:42 | Re: Selectivity of "=" (Re: [HACKERS] Index not used on simple se lect) |
Previous Message | Bernard Frankpitt | 1999-07-28 15:02:41 | Re: Selectivity of "=" (Re: [HACKERS] Index not used on simple select) |