Подтвердить что ты не робот

Перемещение базы данных с помощью pg_dump и psql -U postgres db_name <... приводит к "ERROR: отношение" table_name "не существует"

Я переместил мою базу данных 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 не существует в импортированной схеме.

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

выберите count (0) из myschema.table1

Затем он жалуется на разрешения:

"ERROR: permission denied for schema myschema"

Зачем нужны разные разрешения?

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

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

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

Спасибо заранее.

4b9b3361

Ответ 1

Вы переходите к той же версии 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. Надеюсь, что это поможет.

Ответ 2

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

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

Ответ 3

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

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