On 2/19/19 5:02 PM, Julie Nishimura
wrote:
Hello,
we are almost out of space on our main data
directory, and about to introduce new directory to
our cluster. We cannot use multiple physical disks
as a single volume, so we are thinking about
creation new tablespace.
Our
current data_directory shows as follows:
/data/postgresql/9.6/main
postgres=#
SELECT spcname FROM pg_tablespace;
spcname
------------
pg_default
pg_global
(2 rows)
We
also have 36 existing databases on this cluster.
If
we add new directory, will it be enough to execute
the following commands in order to force new data
there:
CREATE TABLESPACE tablespace01 LOCATION '/data/postgresql/9.6/main01';
ALTER DATABASE db_name SET TABLESPACE tablespace01
Do I need to repeat it for all our existing databases?
Since the command is ALTER DATABASE
<your_user_db>, it seems that yes you have to do
it for all of them. A simple bash script should knock
that out quickly.
Should I change our "template*" dbs as well?
If you want
new databases to automatically go to
tablespace01 then alter template1.
Do I need to do something else?
Maybe, depending on the size of your databases, and how
much down time you can afford,
https://www.postgresql.org/docs/9.6/sql-alterdatabase.html
"This command physically moves any tables or indexes in
the database's old default tablespace to the new
tablespace."
For example, our multi-TB databases are so big that
moving it all at once is unreasonably slow. And a
failure might leave the db is a bad spot. Thus, I'd
move one table at a time, a few per outage.
Naturally, YMMV.
Thank you for your advises.
--
Angular momentum makes the world go 'round.