Search Postgresql Archives

Re: Why can't I drop a tablespace?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Laurenz Albe wrote:
On Fri, 2021-07-09 at 20:04 +0100, Phil Endecott wrote:
=# create tablespace tempspace location "/db_temp";
=# alter table requests set tablespace tempspace;

That didn't work; I think disk space had actually reached zero:

PANIC:  could not write to file "pg_wal/xlogtemp.19369": No space left on device
STATEMENT:  alter table requests set tablespace tempspace;

So I shut down the database and resolved the problem in a more conventional way by resizing the filesystem. It is now (apparently) functioning normally.

BUT: I am unable to drop the tablespace that I created:

=# drop tablespace tempspace;
ERROR:  tablespace "tempspace" is not empty

On inspection /db_temp does contain a few GB of data that looks consistent with my table "requests" that I had tried to move.

postgres:/db_temp/PG_11_201809051$ ls -l 17829/
total 2894972
-rw------- 1 postgres postgres   32137216 Jul  8 18:35 486095
-rw------- 1 postgres postgres   37240832 Jul  8 18:57 494286
-rw------- 1 postgres postgres 1073741824 Jul  8 19:02 502478
-rw------- 1 postgres postgres 1073741824 Jul  8 19:03 502478.1
-rw------- 1 postgres postgres  747577344 Jul  8 19:03 502478.2

I can't find what is using it:

These files don't get cleaned up after a crash, so they may well be
leftovers you can remove.

Thanks Laurenz. I was looking at the source for "alter table set
tablespace" yesterday trying to work out what is supposed to happen.
There is a comment at tablecmds.c line 3989: "Thanks to the magic of
MVCC, an error anywhere along the way rolls back the whole operation;
we don't have to do anything special to clean up." But I guess that
creating an entirely new file on a different filesystem is an
exception to that.

Use \dt+ and \di+ to determine if the table or any of its indexes
actually resides in the new tablespace.  Don't forget the TOAST table.

"select distinct(reltablespace) from pg_class" gives only pg_global and
null. Is that including TOAST tables etc.?

If they are all still in the original tablespace as they should be
on account of the transactional guarantees, go ahead and manually
remove the files.

My plan is to wait for a couple of days to see if there are any other
opinions here, and then do that.


Thanks again,

Phil.









[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux