Thread: "Cluster" means "tangle" for me

"Cluster" means "tangle" for me

From
Jeff Eckermann
Date:
I would appreciate any advice on getting out of this strange situation.  My
table now doesn't exist, but I can't recreate it either (at least under that
name).

jeffe@kiyoko=> psql -V
psql (PostgreSQL) 7.0.0

jeffe@kiyoko=> uname -a
FreeBSD kiyoko.la.verio.net 4.0-STABLE FreeBSD 4.0-STABLE #0: Thu Apr 27
10:44:07 CDT 2000

extracts=# create index dc_et_i on dedcolo (equip_type);
CREATE
extracts=# cluster dc_et_i on dedcolo;
ERROR:  temp_286bbc3 is an index relation
extracts=# drop index dc_et_i;
ERROR:  index "dc_et_i" nonexistent
extracts=# \d dedcolo
Did not find any relation named "dedcolo".
extracts=# vacuum verbose analyze;
(snip)
NOTICE:  mdopen: couldn't open temp_28421e0: No such file or directory
NOTICE:  RelationIdBuildRelation: smgropen(temp_28421e0): No such file or
directory
NOTICE:  --Relation temp_28421e0--
NOTICE:  mdopen: couldn't open temp_28421e0: No such file or directory
ERROR:  cannot open relation temp_28421e0
extracts=# drop table temp_28421e0;
NOTICE:  mdopen: couldn't open temp_28421e0: No such file or directory
NOTICE:  mdopen: couldn't open temp_28421e0: No such file or directory
NOTICE:  mdopen: couldn't open temp_28421e0: No such file or directory

Re: "Cluster" means "tangle" for me

From
Tom Lane
Date:
Jeff Eckermann <jeckermann@verio.net> writes:
> I would appreciate any advice on getting out of this strange situation.  My
> table now doesn't exist, but I can't recreate it either (at least under that
> name).

Hmm, was "dedcolo" a temp table?  It looks like clustering a temp table
gets confused.  (In current sources, it's still pretty broken: the
cluster succeeds, but the table is no longer temp afterwards ...
will try to fix this for 7.1.)

I'd suggest that you restart your session, then repeat the vacuum,
and for each table that you get "mdopen" notices about, create an
empty file by that name in the database directory.  Then you'll be
able to drop that table.

            regards, tom lane

RE: "Cluster" means "tangle" for me

From
Jeff Eckermann
Date:
Thanks for the advice.
I repeated the vacuum, but it completed without any mdopen notices this
time.
I created files corresponding to the temp* names from the last vacuum, but
was still unable to drop the table.
After confirming that there was no reference to the table name in any of the
system tables, I deleted the "dedcolo" file from the database directory.
Now I was able to create a table with that name.
I couldn't resist going back for a second try, using a similarly named table
with the same data (neither this nor the previous was a temp table, BTW):

extracts=# create table dedcolo (test text);
CREATE
extracts=# drop table dedcolo;
DROP
extracts=# \d dedcolo2
               Table "dedcolo2"
        Attribute         |  Type   | Modifier
--------------------------+---------+----------
 market_code              | text    |
 legacy_acct_no           | text    |
 usage_guiding            | text    |
 service_identifier       | text    |
 subscriber_no            | integer |
 rev_rcv_cost_center      | text    |
 arbor_acct_no            | integer |
 last_name                | text    |
 first_name               | text    |
 company_name             | text    |
 sales_code               | text    |
 date_created             | date    |
 tracking_id              | integer |
 product_start_date       | date    |
 product_stop_date        | date    |
 product_status           | text    |
 prod_billed_thru_date    | date    |
 element_id               | text    |
 equip_type               | text    |
 product_description      | text    |
 billing_frequency        | text    |
 rate                     | money   |
 rate_override_start_date | date    |
 rate_override_end_date   | date    |
 rate_override            | money   |
 disconnect_reason        | text    |
Indices: dc2_acct_i,
         dc2_et_i

extracts=# cluster dc2_acct_i on dedcolo2;
ERROR:  temp_28a1899 is an index relation
extracts=# \d dedcolo
Did not find any relation named "dedcolo".
extracts=# \d temp_28a1899
  Index "temp_28a1899"
   Attribute   |  Type
---------------+---------
 arbor_acct_no | integer
btree

extracts=#

This corresponds to the index being clustered.

> -----Original Message-----
> From:    Tom Lane [SMTP:tgl@sss.pgh.pa.us]
> Sent:    Tuesday, January 09, 2001 6:57 PM
> To:    Jeff Eckermann
> Cc:    'pgsql-general@postgresql.org'
> Subject:    Re: [GENERAL] "Cluster" means "tangle" for me
>
> Jeff Eckermann <jeckermann@verio.net> writes:
> > I would appreciate any advice on getting out of this strange situation.
> My
> > table now doesn't exist, but I can't recreate it either (at least under
> that
> > name).
>
> Hmm, was "dedcolo" a temp table?  It looks like clustering a temp table
> gets confused.  (In current sources, it's still pretty broken: the
> cluster succeeds, but the table is no longer temp afterwards ...
> will try to fix this for 7.1.)
>
> I'd suggest that you restart your session, then repeat the vacuum,
> and for each table that you get "mdopen" notices about, create an
> empty file by that name in the database directory.  Then you'll be
> able to drop that table.
>
>             regards, tom lane

Re: "Cluster" means "tangle" for me

From
Tom Lane
Date:
Jeff Eckermann <jeckermann@verio.net> writes:
> extracts=# cluster dc2_acct_i on dedcolo2;
> ERROR:  temp_28a1899 is an index relation
> extracts=# \d dedcolo
> Did not find any relation named "dedcolo".
> extracts=# \d temp_28a1899
>   Index "temp_28a1899"
>    Attribute   |  Type
> ---------------+---------
>  arbor_acct_no | integer
> btree

Now that I think about it, the "temp_xxx" name does not correspond to
what we use for temporary tables; rather it is the form of temporary
name under which the CLUSTER command creates the new table and index.
(Under the hood, CLUSTER builds the new table and index, then drops
the old ones and renames the new ones into place.  This is why you
lose all the other indexes and other decoration :-(.)

The cited error seems to indicate that CLUSTER is trying to open the
new index with heap_open instead of index_open.  If so, it'd fail
every time :-( ... but the new index and table ought to go away on
failure, not hang around.  So I'm still confused.

What version of Postgres did you say you are using?

            regards, tom lane

RE: "Cluster" means "tangle" for me

From
Jeff Eckermann
Date:
I'm using version 7.00.
I know there has been a lot of bugs cleaned up since, but nothing that has
bitten me yet.  I was hoping to hold off upgrading until the release of 7.1,
if that is what you would be suggesting ....

> -----Original Message-----
> From:    Tom Lane [SMTP:tgl@sss.pgh.pa.us]
> Sent:    Wednesday, January 10, 2001 9:00 PM
> To:    Jeff Eckermann
> Cc:    'pgsql-general@postgresql.org'
> Subject:    Re: [GENERAL] "Cluster" means "tangle" for me
>
> Jeff Eckermann <jeckermann@verio.net> writes:
> > extracts=# cluster dc2_acct_i on dedcolo2;
> > ERROR:  temp_28a1899 is an index relation
> > extracts=# \d dedcolo
> > Did not find any relation named "dedcolo".
> > extracts=# \d temp_28a1899
> >   Index "temp_28a1899"
> >    Attribute   |  Type
> > ---------------+---------
> >  arbor_acct_no | integer
> > btree
>
> Now that I think about it, the "temp_xxx" name does not correspond to
> what we use for temporary tables; rather it is the form of temporary
> name under which the CLUSTER command creates the new table and index.
> (Under the hood, CLUSTER builds the new table and index, then drops
> the old ones and renames the new ones into place.  This is why you
> lose all the other indexes and other decoration :-(.)
>
> The cited error seems to indicate that CLUSTER is trying to open the
> new index with heap_open instead of index_open.  If so, it'd fail
> every time :-( ... but the new index and table ought to go away on
> failure, not hang around.  So I'm still confused.
>
> What version of Postgres did you say you are using?
>
>             regards, tom lane

Re: "Cluster" means "tangle" for me

From
Tom Lane
Date:
Jeff Eckermann <jeckermann@verio.net> writes:
> I'm using version 7.00.

Well, there's your problem ...

> I know there has been a lot of bugs cleaned up since, but nothing that has
> bitten me yet.  I was hoping to hold off upgrading until the release of 7.1,
> if that is what you would be suggesting ....

Consider yourself bitten.  You may care to contemplate these post-7.0
CVS log entries:


Revision 1.52 / (download) - annotate - [select for diffs] , Thu May 11 03:54:17 2000 UTC (8 months ago) by tgl
Branch: MAIN
Changes since 1.51: +18 -36 lines
Diff to previous 1.51

Fix CLUSTER ... or at least undo the bit-rot it's suffered since 6.5.
It's still pretty fundamentally bogus :-(.
Freebie side benefit: ALTER TABLE RENAME works on indexes now.


Revision 1.53 / (download) - annotate - [select for diffs] , Fri May 12 16:10:09 2000 UTC (8 months ago) by tgl
Branch: MAIN
CVS Tags: REL7_0_PATCHES
Changes since 1.52: +18 -5 lines
Diff to previous 1.52

Squash some more CLUSTER bugs.  Never has worked on multiple-column
indexes, apparently, nor on functional indexes with more than one input
column (force of natts = 1 was in the wrong branch of IF statement).
Coredumped if source relation contained any uncommitted tuples, due to
failure to test for success return from heap_fetch.  Fetched tuple
was passed directly to heap_insert, which clobbers the TID and commit
status in the tuple header it's given, which meant that the source
relation's tuples all got trashed as the copy proceeded.  Abort partway
through, and you're left with a lot of missing tuples.
I wonder what else is lurking here ...


            regards, tom lane