moving a database to a new 15.1 server

Started by Matthias Apitzabout 3 years ago3 messagesgeneral
Jump to latest
#1Matthias Apitz
guru@unixarea.de

Hello,

The source database in the 12.11 server shows this:

$ psql -Ulbs_lbsoclc01_dev_r1_dbo_u $DATABASE
psql (12.11)
Type "help" for help.

lbs_lbsoclc01_dev_r1=>
lbs_lbsoclc01_dev_r1=> \d
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+-------+----------------------------
dbo | accession_index | table | lbs_lbsoclc01_dev_r1_dbo_u
dbo | acq_bind | table | lbs_lbsoclc01_dev_r1_dbo_u
...

I dumped this with pg_dump

$ pg_dump --file=dmp.gz --compress=9 --dbname=$DATABASE

Created in the new server the database

$ createdb -U lbs_lbsoclc01_dev_r1_dbo_u -T template0 lbs_lbsoclc01_dev_r1

and the role for thw user with

CREATE ROLE lbs_lbsoclc01_dev_r1_dbo_u WITH SUPERUSER CREATEDB LOGIN PASSWORD 'xxxxxx' ;
CREATE ROLE

and loaded the dump with

$ gzip -dc dmp.gz | psql -U lbs_lbsoclc01_dev_r1_dbo_u lbs_lbsoclc01_dev_r1

This all went fine. But when I now look into the database:

$ psql -Ulbs_lbsoclc01_dev_r1_dbo_u lbs_lbsoclc01_dev_r1
psql (15.1)
Type "help" for help.

lbs_lbsoclc01_dev_r1=#
lbs_lbsoclc01_dev_r1=# \d
Did not find any relations.
lbs_lbsoclc01_dev_r1=# \d dbo.accession_index
Table "dbo.accession_index"
Column | Type | Collation | Nullable | Default
------------------+-----------------------+-----------+----------+---------
iln | smallint | | not null |

lbs_lbsoclc01_dev_r1=# select count(*) from counter;
ERROR: relation "counter" does not exist
LINE 1: select count(*) from counter;
^
lbs_lbsoclc01_dev_r1=# select count(*) from dbo.counter;
count
-------
41

i.e. I have to specify the schema 'dbo' to access the tables.

What I am missing here in this move?

matthias

--
Matthias Apitz, ✉ guru@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub

#2Thomas Kellerer
shammat@gmx.net
In reply to: Matthias Apitz (#1)
Re: moving a database to a new 15.1 server

Matthias Apitz schrieb am 01.02.2023 um 13:24:

$ psql -Ulbs_lbsoclc01_dev_r1_dbo_u lbs_lbsoclc01_dev_r1
psql (15.1)
Type "help" for help.

lbs_lbsoclc01_dev_r1=#
lbs_lbsoclc01_dev_r1=# \d
Did not find any relations.
lbs_lbsoclc01_dev_r1=# \d dbo.accession_index
Table "dbo.accession_index"
Column | Type | Collation | Nullable | Default
------------------+-----------------------+-----------+----------+---------
iln | smallint | | not null |

lbs_lbsoclc01_dev_r1=# select count(*) from counter;
ERROR: relation "counter" does not exist
LINE 1: select count(*) from counter;
^
lbs_lbsoclc01_dev_r1=# select count(*) from dbo.counter;
count
-------
41

i.e. I have to specify the schema 'dbo' to access the tables.

you need to change the search_path

alter user lbs_lbsoclc01_dev_r1_dbo_u set search_path = dbo;

This was probably done on the old server. You can see the user's definition
if you dump the "globals" from the old server:

pg_dumpall -U postgres --globals-only -f globals.sql

#3Erik Wienhold
ewie@ewie.name
In reply to: Matthias Apitz (#1)
Re: moving a database to a new 15.1 server

On 01/02/2023 13:24 CET Matthias Apitz <guru@unixarea.de> wrote:

The source database in the 12.11 server shows this:

$ psql -Ulbs_lbsoclc01_dev_r1_dbo_u $DATABASE
psql (12.11)
Type "help" for help.

lbs_lbsoclc01_dev_r1=>
lbs_lbsoclc01_dev_r1=> \d
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+-------+----------------------------
dbo | accession_index | table | lbs_lbsoclc01_dev_r1_dbo_u
dbo | acq_bind | table | lbs_lbsoclc01_dev_r1_dbo_u
...

I dumped this with pg_dump

$ pg_dump --file=dmp.gz --compress=9 --dbname=$DATABASE

Created in the new server the database

$ createdb -U lbs_lbsoclc01_dev_r1_dbo_u -T template0 lbs_lbsoclc01_dev_r1

and the role for thw user with

CREATE ROLE lbs_lbsoclc01_dev_r1_dbo_u WITH SUPERUSER CREATEDB LOGIN PASSWORD 'xxxxxx' ;
CREATE ROLE

and loaded the dump with

$ gzip -dc dmp.gz | psql -U lbs_lbsoclc01_dev_r1_dbo_u lbs_lbsoclc01_dev_r1

This all went fine. But when I now look into the database:

$ psql -Ulbs_lbsoclc01_dev_r1_dbo_u lbs_lbsoclc01_dev_r1
psql (15.1)
Type "help" for help.

lbs_lbsoclc01_dev_r1=#
lbs_lbsoclc01_dev_r1=# \d
Did not find any relations.
lbs_lbsoclc01_dev_r1=# \d dbo.accession_index
Table "dbo.accession_index"
Column | Type | Collation | Nullable | Default
------------------+-----------------------+-----------+----------+---------
iln | smallint | | not null |

lbs_lbsoclc01_dev_r1=# select count(*) from counter;
ERROR: relation "counter" does not exist
LINE 1: select count(*) from counter;
^
lbs_lbsoclc01_dev_r1=# select count(*) from dbo.counter;
count
-------
41

i.e. I have to specify the schema 'dbo' to access the tables.

What I am missing here in this move?

Your search_path does not contain dbo. Check SHOW search_path; in the old
database and set the search_path with ALTER DATABASE in the new database accordingly.

--
Erik