Перемещение базы данных с помощью pg_dump и psql -U postgres db_name <... приводит к «ОШИБКЕ: отношение« имя_ таблицы »не существует» - PullRequest
18 голосов
/ 19 августа 2010

Я переместил свою базу данных PostgresQL с одного жесткого диска на другой, используя

pg_dump -U postgres db_name > db_name.dump

, а затем

psql -U postgres db_name < db_name.dump

Я создал базу данных db_name одинаково в обоих случаях. В новой базе данных, когда я запускаю свою программу Java с запросом JPA (или запросом JDBC), я получаю эту ошибку:

"ERROR: relation "table1" does not exist"

Запрос:

select count(0) from table1

Я знаю, что у меня есть соединение, потому что, если я изменяю пароль в параметрах соединения, я получаю ошибку.

По какой-то причине в новом экземпляре PostgresQL он считает, что table1 не существует в импортированной схеме.

Если я изменю запрос на

выберите количество (0) из myschema.table1

Тогда он жалуется на разрешения:

"ERROR: permission denied for schema myschema"

Почему разрешения будут разными?

Таблица table1 существует в myschema, потому что я вижу ее в инструменте pgAdmin. Все строки были импортированы в новый экземпляр PostgresQL.

Когда я делаю запрос из Java, комбинация pg_dump и psql создала проблему.

Что мне нужно сделать, чтобы решить эту проблему?

Заранее спасибо.

Ответы [ 3 ]

31 голосов
/ 19 августа 2010

Вы переходите на ту же версию PostgreSQL?Могут возникнуть проблемы, если вы создадите дамп с помощью pg_dump 8.3 и попытаетесь восстановить его в Postgresql 8.4.В любом случае, предполагая, что это та же версия, попробуйте следующее:

Создать дамп всех глобальных объектов, таких как пользователи и группы (не знаю, отсутствовали ли они в вашем дампе):

pg_dumpall -g -U postgres > globals.sql

Дамп схемы базы данных:

pg_dump -Fp -s -v -f db-schema.sql -U postgres dbname

Дамп содержимого базы данных:

pg_dump -Fc -v -f full.dump -U postgres dbname

Восстановить сейчас.

psql -f globals.sql
psql -f db-schema.sql dbname
pg_restore -a -d dbname -Fc full.dump

Это мои 0,02 доллара.Надеюсь, это поможет.

3 голосов
/ 07 ноября 2016

Я столкнулся с этой проблемой. Тогда я понял, что забыл установить расширение postgis.

Не забудьте установить используемые вами расширения.

1 голос
/ 21 августа 2010

Мне удалось решить эту проблему, изменив привилегии базы данных на public CONNECT и привилегии схемы для public и postgres = USAGE и CREATE.

Мои сценарии резервного копирования, по-видимому, не сохранили привилегии, по крайней мерепри переходе с 8,3 на 8,4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...