Работа над ошибками — phppgadmin

от автора

Один из наших клиентов поставил задачу — не заливается дамп базы данных через 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *