Creating a new database on a different file system

Started by Ian Daunceyabout 1 year ago7 messagesgeneral
Jump to latest
#1Ian Dauncey
Ian.Dauncey@bankzero.co.za

Hi All

We are running an old version of PostgreSQL on a Linux Server.
We have created a few databases on the file system defined in the postgresql.conf, but now I would like to create another database within the same cluster but on a different file system.
Is this possible and if so, how do we go about it.

In a nutshell:

I have the following statement defined in the postgresql.conf file - data_directory = '/opt/pgdata_postgres'

I have created the following database datadb1, datadb2 (plus all default databases)

Now I want to create a third database datadb3, but it needs to be created on file system "/opt/pgdata1_postgres" and not on '/opt/pgdata_postgres'

Is this possible

Regards
Ian

#2Luca Ferrari
fluca1978@gmail.com
In reply to: Ian Dauncey (#1)
Re: Creating a new database on a different file system

On Mon, Mar 17, 2025 at 3:49 PM Ian Dauncey <Ian.Dauncey@bankzero.co.za> wrote:

We have created a few databases on the file system defined in the postgresql.conf, but now I would like to create another database within the same cluster but on a different file system.

Is this possible and if so, how do we go about it.

create a tablespace on the filesystem you want to use, and then create
the database adding the `WITH TABLESPACE` clause.
See <https://www.postgresql.org/docs/17/sql-createtablespace.html&gt;

Luca

#3Tim Gerber
tggerber@gmail.com
In reply to: Ian Dauncey (#1)
Re: Creating a new database on a different file system

Hi Ian,

Tablespaces would work... take a look:
https://www.postgresql.org/docs/current/manage-ag-tablespaces.html

Best,
Tim

On Mon, Mar 17, 2025 at 9:49 AM Ian Dauncey <Ian.Dauncey@bankzero.co.za>
wrote:

Show quoted text

Hi All

We are running an old version of PostgreSQL on a Linux Server.

We have created a few databases on the file system defined in the
postgresql.conf, but now I would like to create another database within the
same cluster but on a different file system.

Is this possible and if so, how do we go about it.

In a nutshell:

I have the following statement defined in the postgresql.conf file -
data_directory = '/opt/pgdata_postgres'

I have created the following database datadb1, datadb2 (plus all default
databases)

Now I want to create a third database datadb3, but it needs to be created
on file system “/opt/pgdata1_postgres” and not on ‘/opt/pgdata_postgres'

Is this possible

Regards

Ian

#4Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Luca Ferrari (#2)
Re: Creating a new database on a different file system

On Mon, 2025-03-17 at 15:51 +0100, Luca Ferrari wrote:

On Mon, Mar 17, 2025 at 3:49 PM Ian Dauncey <Ian.Dauncey@bankzero.co.za> wrote:

We have created a few databases on the file system defined in the postgresql.conf,
but now I would like to create another database within the same cluster but on a
different file system.

Is this possible and if so, how do we go about it.

create a tablespace on the filesystem you want to use, and then create
the database adding the `WITH TABLESPACE` clause.
See <https://www.postgresql.org/docs/17/sql-createtablespace.html&gt;

That is an option, but I would recommend to create a new database cluster
on the new file system rather than creating a tablespace.

Yours,
Laurenz Albe

#5Ron
ronljohnsonjr@gmail.com
In reply to: Laurenz Albe (#4)
Re: Creating a new database on a different file system

On Mon, Mar 17, 2025 at 11:18 AM Laurenz Albe <laurenz.albe@cybertec.at>
wrote:

On Mon, 2025-03-17 at 15:51 +0100, Luca Ferrari wrote:

On Mon, Mar 17, 2025 at 3:49 PM Ian Dauncey <Ian.Dauncey@bankzero.co.za>

wrote:

We have created a few databases on the file system defined in the

postgresql.conf,

but now I would like to create another database within the same

cluster but on a

different file system.

Is this possible and if so, how do we go about it.

create a tablespace on the filesystem you want to use, and then create
the database adding the `WITH TABLESPACE` clause.
See <https://www.postgresql.org/docs/17/sql-createtablespace.html&gt;

That is an option, but I would recommend to create a new database cluster
on the new file system rather than creating a tablespace.

That of course requires using another port, which can be tricky in a
company that by default closes all firewall ports at the network switch
level, and where you must enumerate every server/subnet ("Rejected. Subnet
range too broad!") that needs access to the new port, it takes time for
requests for new port openings to be approved ("Rejected. We don't
recognize 5433!") and then implemented.

Much easier to use a tablespace.

--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!

#6Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Ron (#5)
Re: Creating a new database on a different file system

On Mon, 2025-03-17 at 14:33 -0400, Ron Johnson wrote:

On Mon, Mar 17, 2025 at 11:18 AM Laurenz Albe <laurenz.albe@cybertec.at> wrote:

On Mon, 2025-03-17 at 15:51 +0100, Luca Ferrari wrote:

On Mon, Mar 17, 2025 at 3:49 PM Ian Dauncey <Ian.Dauncey@bankzero.co.za> wrote:

We have created a few databases on the file system defined in the postgresql.conf,
but now I would like to create another database within the same cluster but on a
different file system.

Is this possible and if so, how do we go about it.

create a tablespace on the filesystem you want to use, and then create
the database adding the `WITH TABLESPACE` clause.
See <https://www.postgresql.org/docs/17/sql-createtablespace.html&gt;

That is an option, but I would recommend to create a new database cluster
on the new file system rather than creating a tablespace.

That of course requires using another port, which can be tricky in a company that by
default closes all firewall ports at the network switch level, and where you must
enumerate every server/subnet ("Rejected. Subnet range too broad!") that needs access
to the new port, it takes time for requests for new port openings to be approved
("Rejected. We don't recognize 5433!") and then implemented.

Much easier to use a tablespace.

*shrug* Sure, there are entities that think that security and professionalism can be
measured in how difficult you are making everybody's life. If rules and regulations
are in the way of choosing the best solution, you have to go for the second best one.

Yours,
Laurenz Albe

#7Ron
ronljohnsonjr@gmail.com
In reply to: Laurenz Albe (#6)
Re: Creating a new database on a different file system

On Mon, Mar 17, 2025 at 4:30 PM Laurenz Albe <laurenz.albe@cybertec.at>
wrote:

On Mon, 2025-03-17 at 14:33 -0400, Ron Johnson wrote:

On Mon, Mar 17, 2025 at 11:18 AM Laurenz Albe <laurenz.albe@cybertec.at>

wrote:

On Mon, 2025-03-17 at 15:51 +0100, Luca Ferrari wrote:

On Mon, Mar 17, 2025 at 3:49 PM Ian Dauncey <

Ian.Dauncey@bankzero.co.za> wrote:

We have created a few databases on the file system defined in the

postgresql.conf,

but now I would like to create another database within the same

cluster but on a

different file system.

Is this possible and if so, how do we go about it.

create a tablespace on the filesystem you want to use, and then

create

the database adding the `WITH TABLESPACE` clause.
See <https://www.postgresql.org/docs/17/sql-createtablespace.html&gt;

That is an option, but I would recommend to create a new database

cluster

on the new file system rather than creating a tablespace.

That of course requires using another port, which can be tricky in a

company that by

default closes all firewall ports at the network switch level, and where

you must

enumerate every server/subnet ("Rejected. Subnet range too broad!") that

needs access

to the new port, it takes time for requests for new port openings to be

approved

("Rejected. We don't recognize 5433!") and then implemented.

Much easier to use a tablespace.

*shrug* Sure, there are entities that think that security and
professionalism can be
measured in how difficult you are making everybody's life. If rules and
regulations
are in the way of choosing the best solution, you have to go for the
second best one.

Things are what they are.

A listener (like what SQL Server uses) on port 5432 that looks at a
connection, determines which instance it's asking for, and then redirects
the connection to it. would be useful.

How? By enabling multiple instances all externally viewable on 5432, one
can run PgBackRest individually for each database instead of for
*every* database.
Role management would become more complicated, but *how much* more
complicated is site-dependent.

--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!