Обсуждение: moving a database to a new 15.1 server
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
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
> 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