Как стать автором
Обновить
70.8
Слёрм
Учебный центр для тех, кто работает в IT

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

Время на прочтение2 мин
Количество просмотров3.4K
Один из наших клиентов поставил задачу — не заливается дамп базы данных через 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
Теги:
Хабы:
-6
Комментарии7

Публикации

Информация

Сайт
slurm.io
Дата регистрации
Дата основания
Численность
51–100 человек
Местоположение
Россия
Представитель
Антон Скобин