Re: Error when trying to drop a tablespace - Mailing list pgsql-general
| From | Cyril SCETBON |
|---|---|
| Subject | Re: Error when trying to drop a tablespace |
| Date | |
| Msg-id | 4859082E.8080208@echo.fr Whole thread Raw |
| In response to | Re: Error when trying to drop a tablespace ("Albe Laurenz" <laurenz.albe@wien.gv.at>) |
| List | pgsql-general |
Albe Laurenz wrote:
> Cyril SCETBON wrote:
>
>>>>>>>> I get the following error :
>>>>>>>>
>>>>>>>> postgres=# DROP TABLESPACE IF EXISTS my_tbs;
>>>>>>>> ERROR: tablespace "my_tbs" is not empty
>>>>>>>>
>>>>>>>> I've searched in pg_class and I'm not able to find a relation which
>>>>>>>> refers to my_tbs with :
>>>>>>>>
>>>>> Find out the directory:
>>>>>
>>>>> SELECT oid, spclocation FROM pg_catalog.pg_tablespace WHERE spcname = 'my_tbs';
>>>>>
>>>>> is there anything in this directory?
>>>>>
>>>> cd spclocation
>>>>
>>>> find .
>>>> .
>>>> ./100456
>>>> ./100456/100738
>>>> ./100456/102333
>>>> ./100456/103442
>>>>
>>> [...]
>>>
>>> A tablespace does not belong to a specific database, so it could be that
>>> these objects belong to another database that also uses this tablespace.
>>>
>>> Try to look for objects that depend on the tablespace in other databases.
>>> I also forgot pg_shdepend which contains relationships to shared objects
>>> such as roles - look there too.
>>>
>> VALUES=`find /path/100456/ -type f -exec basename {} \;|xargs|sed -e 's/ /,/g'`
>> for db in `/usr/lib/postgresql/8.2/bin/oid2name|grep -v template|tail -n
>> +4|awk '{print $2}'`; do psql $db -c "select count(*) from pg_shdepend
>> where objid in ($VALUES) or refobjid in ($VALUES)"; done
>>
>> nothing :-(
>>
>
> Did you also look in pg_depend in all the other databases?
> You could run the following in all databases:
>
> SELECT t.relname AS catalog, d.objid AS oid_dependent
> FROM pg_catalog.pg_class t JOIN
> pg_catalog.pg_depend d ON (t.oid = d.classid)
> WHERE refobjid = 100456;
>
for db in `/usr/lib/postgresql/8.2/bin/oid2name|grep -v template|tail -n
+4|awk '{print $2}'`; do psql $db -c "SELECT t.relname AS catalog,
d.objid AS oid_dependent FROM pg_catalog.pg_class t JOIN
pg_catalog.pg_depend d ON (t.oid = d.classid) WHERE refobjid = 100456"; done
catalog | oid_dependent
---------+---------------
(0 rows)
catalog | oid_dependent
---------+---------------
(0 rows)
catalog | oid_dependent
---------+---------------
(0 rows)
> You could also try the following in all databases:
>
> SELECT oid, relname, relkind FROM pg_catalog.pg_class
> WHERE oid IN (100738, 102333, 103442);
>
VALUES=`find /path/100456/ -type f -exec basename {} \;|sort -n|awk
'$_>16000 {print $1}'|xargs|sed -e 's/ /,/g'`
for db in `/usr/lib/postgresql/8.2/bin/oid2name|grep -v template|tail -n
+4|awk '{print $2}'`; do psql $db -c "SELECT oid, relname, relkind
FROM pg_catalog.pg_class WHERE oid IN ($VALUES)"; done
oid | relname | relkind
-----+---------+---------
(0 rows)
oid | relname | relkind
-----+---------+---------
(0 rows)
oid | relname | relkind
-----+---------+---------
(0 rows)
> (hoping that some of the objects are tables or views or sequences).
>
not better :-(
> Yours,
> Laurenz Albe
>
--
Cyril SCETBON
pgsql-general by date: