Bounty Edit: я оставил исходный вопрос, но хотел бы получить хороший ответ на весь фиаско с разрешениями, в котором, похоже, купается Postgres.
'Импорт и экспорт клиентских баз данных: полевое руководство '
Я получил эту работу сегодня, где нам нужно использовать PostgreSQL.
У клиента два хоста, и они используют только phpPgAdmin для доступа к базе данных. Нет SSH.
Нам нужно экспортировать данные, а затем импортировать их на локальную машину разработчика.
Быть мудрым на пути MySQL Я немного заблудился в правильном процессе.
Там PostgreSQL >> база данных >> экспорт
и оттуда получается:
Я просматривал документацию, но, честно говоря, я не могу найти простого объяснения и на данный момент мне наплевать на db или Postgres. Все, что нам нужно сделать, это взяться за сайты PHP.
Ударь меня синопсисом / шпаргалкой / руководством по моим системным админкам.
Редактирует:
Изменен вопрос, чтобы включить разрешения PostgreSQL на импорт базы данных.
Что касается разрешений, то действительно кажется, что нужно больше настроить новый сервер PostgreSQL.
Я спрашиваю конкретно о phpPgAdmin, потому что мой сервер не является локальным и не имеет графического интерфейса.
У меня такое ощущение, что это вопрос разрешений http://pgedit.com/public/sql/acl_admin/index.html
Уточнено отсутствие SSH на поле клиентов.
По-прежнему не могу найти краткую документацию по этому процессу. Я действительно избегаю задачи, пока не увижу более четкое представление. Возможно, вам будет проще преобразовать в базу данных MySQL.
Экспорт
Импортировать
Экспорт phpPgAdmin использует pg_dump. Вы можете прочитать об этом, если хотите знать, что он делает.
Вы также можете экспортировать его как SQL вместо COPY. COPY предназначен для Postgres, и вам понадобится SQL, если вы хотите попробовать использовать другую базу данных. Также легче понять, если вы использовали разные базы данных.
С «Структурой и данными» вы получите sql-файл, который будет начинаться со структуры таблицы базы данных, затем всех данных, а затем ограничений и ключей.
Как указал sascha, у вас могут быть проблемы с разрешениями. Мне всегда было проще просто удалить строки разрешений или закомментировать их, поскольку это только для базы данных разработки. Удалите / прокомментируйте / измените строки с «ВЛАДЕЛЬЦЕМ» в них. подобно
ALTER TABLE schema.table OWNER TO pguser;
Каждый оператор CREATE TABLE будет иметь один из них после него, чтобы установить владельца таблицы.
ИМПОРТ
Если у вас есть ошибки SQL (которые я видел довольно часто, в зависимости от данных. Строки с нечетными символами могут быть проблемой), может быть проще разделить файл и просто сначала скопировать структуру и запустить ее как стандарт SQL-запрос. Затем начните с данных и импортируйте их по одной таблице за раз. Это значительно упрощает поиск ошибки, если разрезать ее на части. Особенно при работе с очень бесполезными сообщениями об ошибках.
Да, это большая работа по копированию и вставке, но она выполняет свою работу и, вероятно, займет меньше времени, чем перенос ее в MySQL, а затем необходимость изменения PHP для подключения и получения данных из MySQL вместо Postgres.
И PhpPgAdmin, и pgadminIII могут выполнять операторы SQL.
pgAdminIII -> выберите базу данных -> выберите кнопку «Выполнить произвольные SQL-запросы». PhpPgAdmin -> выберите базу данных -> выберите ссылку «SQL».
Честно говоря, это наименее раздражающий способ перемещения баз данных, который я нашел. Это займет больше времени, но только если вы не столкнетесь с ошибками.
Что касается разрешений, просто откройте дамп базы данных (это обычный текст) и найдите строки, в которых он пытается изменить текущего пользователя или устанавливает владельца таблицы. Затем просто выполните поиск / замену и замените первоначального владельца своим новым именем пользователя. Не нужно вообще беспокоиться о предоставлении / изменении разрешений: D
Раньше нам приходилось делать это все время при переходе от разработки к производству, исходным владельцем базы данных / таблицы был разработчик, и нам нужно было изменить это на учетную запись клиента, как только мы были готовы к запуску.
Мы всегда работали с консоли, используя pg_dump
и другие связанные инструменты командной строки, но я ожидаю, что они будут соответствовать параметрам, которые у вас есть в веб-интерфейсе.
Беги, не уходи от хостинг-провайдера. Вам нужен прямой доступ к данным не только через phppgadmin.
phppgadmin (а также phpmyadmin) в этих случаях создает огромную проблему. Получить свалки не получится.
Рассуждение: с PHP и apache у вас есть макс. время выполнения, а также ограничение памяти для запущенных скриптов. Сейчас это может не быть проблемой с точки зрения времени выполнения / памяти, но по мере роста вашей базы данных вы столкнетесь с ней.
Чтобы получить хороший дамп, вам, по крайней мере, понадобится доступ к базе данных (который, если БД напрямую подключен к сети, конечно, должен быть защищен SSL). Будь то через SSH или напрямую через psql, иначе я не вижу хорошего варианта получения дампов. phppgadmin (или phpmyadmin) может быть удобен для просмотра через БД, вносить некоторые изменения, делать некоторые (меньшие) выборки и так далее, но не в том случае, если вам нужно получить возможно большие объемы данных.
У меня оба инструмента не работали в разных случаях с тайм-аутом PHP или слишком большим использованием памяти при выполнении резервного копирования / восстановления.
Что касается руководства по резервному копированию, оригинальная документация postgres обычно очень хороша: http://www.postgresql.org/docs/8.3/static/backup.html
Теперь о вашей проблеме, как получить хороший дамп БД:
Я не могу не напрячься, чтобы получить доступ SSH или psql напрямую к хосту. Если ваш хостинг-провайдер не предоставляет вам доступ, настройте локальный PostgreSQL, создайте базу данных для игровой площадки и отправьте им команду pg_dump, которую вы хотите использовать, позвольте им поместить ее в каталог, защищенный SSL и паролем, и загрузите ее оттуда.