Один из наших клиентов поставил задачу — не заливается дамп базы данных через phpPgAdmin
В лог ошибок выводятся сообщения типа
ERROR: relation «public».«company» does not exists
Схема public в наличии имеется, таблицы company нету.
В процессе поиска выясняется, что через консоль этот же дамп заливается без проблем.
Если загружать в web-форму в phpPgAdmin — то тоже все отрабатывает.
Но вот если загружать этот дамп в тот же phpPgAdmin как файл — идут ошибки.
Вот сокращенное содержимое дампа БД:
DROP TABLE IF EXISTS "public"."company"; CREATE TABLE "public"."company" ( "id" int4 NOT NULL, "name" varchar(255) COLLATE "default" NOT NULL, "address" varchar(255) COLLATE "default", ) WITH (OIDS=FALSE) ; COMMENT ON COLUMN "public"."company"."name" IS 'название'; COMMENT ON COLUMN "public"."company"."address" IS 'адрес'; -- ---------------------------- -- Records of company -- ---------------------------- INSERT INTO "public"."company" VALUES ('1', 'Колхоз "Знамя Ильича"', 'Московская область, Коломенский район, с. Нелепецино');
В глаза бросается необычное расположение точки с запятой после команды создания таблицы — на отдельной строке.
Если перенести ее с отдельной строки в строчку с окончанием команды CREATE TABLE — то тогда
обработка файла с дампом БД проходит без проблем.
поиск по коду phpPgAdmin приводит нас в файл /classes/database/Postgres.php
функция executeScript
эта функция вызывается для парсинга загруженного файла с SQL скриптом.
в ней присутствует баг с расстановкой фигурных скобок в if
и в итоге pg_query не выполнялся если строка начиналась с точки с запятой.
поправил код, протестил — все работает.
Теперь надо сообщить о найденном баге автору phpPgAdmin.
phppgadmin есть на гитхабе, так что сделать это очень просто:
заходим/регистрируемся на github.com
проект github.com/phppgadmin/phppgadmin
Смотрим открытые pull request и видим, что мы не одиноки.
Есть и другие люди, которые столкнулись с этим багом, но на мой взгляд неправильно подошли к его исправлению.
Поэтому предложим свое решение проблемы
Нажимаем справа кнопочку Fork и немного ждем, пока гитхаб скопирует проект к вам.
клонируем проект теперь уже от себя
git clone https://github.com/LuckySB/phppgadmin
исправляем баг, коммит, пуш (вводим свои данные для входа на гитхаб) и любуемся своим собственным форком phppgadmin с исправленным багом.
После того, как налюбовались — нажимаем на зеленую кнопочку «Compare, review, create a pull request». Гитхаб создает запрос на внесение изменений в основной проект, и тут наступает самое трудное — написать развернутый коммент к своему патчу 😉
у меня получилось как-то так:
github.com/phppgadmin/phppgadmin/pull/30
ссылка на оригинал статьи http://habrahabr.ru/post/257967/
Добавить комментарий