Re: problem/bug in drop tablespace? - Mailing list pgsql-hackers

From Albe Laurenz
Subject Re: problem/bug in drop tablespace?
Date
Msg-id D960CB61B694CF459DCFB4B0128514C207DEC3F4@exadv11.host.magwien.gv.at
Whole thread Raw
In response to problem/bug in drop tablespace?  (Michael Nolan <htfoot@gmail.com>)
Responses Re: problem/bug in drop tablespace?
List pgsql-hackers
Michael Nolan wrote:
> While researching a problem reported on the -general list by a user
who lost a disk containing his
> index tablespace, I ran into something, but  I'm not sure is a serious
bug or just an inconsistency in
> how \d shows tables.
>
> Here are the steps I took.
>
> 1.  Create a new database 'MYDB' and connect to it.
> 2.  Create a new tablespace 'MYTBLSP'
> 3.  Create a table 'MYTABLE' and populate it.
> 4.  Create an index 'MYIND' on that table, with the index in the new
tablespace, MYTBLSP.
>
> Now, exit psql and delete the files in the tablespace directory
created in step 2, simulating the
> problem the user had.
>
> Trying to execute an SQL command on the table MYTABLE will, as
expected, generate an error.
>
> Now, drop tablespace MYTBLSP.  This will produce an error, but it will
delete the tablespace according
> to \db.
>
> Recreate tablespace MYTBLSP.
>
> Regenerate the index on MYTABLE.  Queries will work on this table
again, as expected.
>
> Now, here's the problem I ran into:
>
> The index will be rebuilt in tablespace MYTBLSP, but \d on table
MYTABLE will not show the index as
> being in that tablespace.

I cannot reproduce this on 9.1.3:

test=# CREATE TABLESPACE mytbsp LOCATION '/home/laurenz/x';
CREATE TABLESPACE

test=# CREATE TABLE mytable(id integer PRIMARY KEY USING INDEX
TABLESPACE mytbsp, val text);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index
"mytable_pkey" for table "mytable"
CREATE TABLE

test=# INSERT INTO mytable VALUES (1, 'eins'), (2, 'zwei');
INSERT 0 2

test=# \d mytable  Table "laurenz.mytable"Column |  Type   | Modifiers
--------+---------+-----------id     | integer | not nullval    | text    |
Indexes:   "mytable_pkey" PRIMARY KEY, btree (id), tablespace "mytbsp"

$ rm -rf /home/laurenz/x/PG_9.1_201105231/*

test=# SELECT * FROM mytable;
ERROR:  could not open file
"pg_tblspc/46752/PG_9.1_201105231/16420/46759": No such file or
directory

Ok, that's expected.

test=# DROP TABLESPACE mytbsp;
DROP TABLESPACE

No error.

test=# CREATE TABLESPACE mytbsp LOCATION '/home/laurenz/x';
CREATE TABLESPACE

test=# REINDEX INDEX mytable_pkey;
ERROR:  could not create directory
"pg_tblspc/46752/PG_9.1_201105231/16420": No such file or directory

Sure, the tablespace OID has changed.

test=# ALTER TABLE mytable DROP CONSTRAINT mytable_pkey;
ALTER TABLE

test=# ALTER TABLE mytable ADD PRIMARY KEY (id) USING INDEX TABLESPACE
mytbsp;
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index
"mytable_pkey" for table "mytable"
ALTER TABLE

test=# \d mytable  Table "laurenz.mytable"Column |  Type   | Modifiers
--------+---------+-----------id     | integer | not nullval    | text    |
Indexes:   "mytable_pkey" PRIMARY KEY, btree (id), tablespace "mytbsp"


Looks ok.

Yours,
Laurenz Albe


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Latch for the WAL writer - further reducing idle wake-ups.
Next
From: Simon Riggs
Date:
Subject: Re: synchronous_commit and remote_write