Перемещение базы данных с помощью 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 создала проблему.
Что мне нужно сделать, чтобы решить эту проблему?
Спасибо заранее.
Ответы
Ответ 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.