2015-02-24 8:45 GMT-05:00 Albe Laurenz <laurenz.a...@wien.gv.at>: > Guillaume Drolet wrote: > > Digging a little more, I found that not only sequences were not moved > but also many tables in > > pg_catalog are still in my old tablespace. This is expected since the > query in the SQL files I used to > > move the tables and indexes had a WHERE clause like this: > > > > SELECT ' ALTER TABLE ' || schemaname || '.' || tablename || ' SET > TABLESPACE pg_default;' > > FROM pg_tables > > WHERE schemaname NOT IN ('pg_catalog', 'information_schema'); > > > > So I tried removing the WHERE clause and running the script again: > > psql -U postgres -d mydb < move_tables_to_pg_default.sql | findstr /R > /C:"[ALTER]" | psql -d mydb -U > > postgres > > > > I got many errors like this one: > > ERROR: permission denied: "pg_event_trigger" is a system catalog > > > > If I can't move tables from pg_catalog, how will I be able to drop that > tablespace I don't want to use > > anymore? > > > > I am thinking that maybe using "ALTER DATABASE mydb SET TABLESPACE > pg_default;" instead would take > > care of all this, no? > > > > But when I tried it last week, I got a message like: some relations > already in target tablespace... > > > > Any help will be much appreciated. > > If you want to move a whole database to a different tablespace (the only > reason > I can think of for doing what you are trying to so), use the command > ALTER DATABASE ... SET TABLESPACE ... >
Thanks Laurenz. I tried your suggestion: psql -U postgres -c "ALTER DATABASE mydb SET TABLESPACE pg_default;" I get this message: ERROR: some relations of database "mortalite" are already in tablespace "pg_default" HINT : You must move them back to the database's default tablespace before using this command. But if I do "SHOW default_tablespace;" in mydb, it showed "pg_default" as the default tablespace. So I tried changing it back to the tablespace I want to get rid of to subsequently moved everything back there so that ultimately, it lets me move everything to pg_default: ALTER DATABASE mydb SET default_tablespace = diamonds; And then: psql -U postgres -c "ALTER DATABASE mydb SET TABLESPACE diamonds;" ALTER DATABASE is issued but nothing gets physically moved to diamonds. Why? > Yours, > Laurenz Albe >