Конференция PG Day Russia растет и масштабируется: этим летом мы готовим для вас доклады и тренинги по всем наиболее популярным базам данных, а также по администрированию и хранению данных. в рамках подготовки мы запустили корпоративный блог, где планируем делиться ценной информацией о происходящем в мире баз данных. Первый пост посвящен инструментам разработки для PostgreSQL, его автор varanio будет рад ответить на ваши вопросы и комментарии!
Я поспрашивал различных людей, имеющих отношение к PostgreSQL, что они используют в реальной жизни для разработки приложений, использующих PG.
Это, конечно, не строго математическая выборка, но тем не менее получился некоторый список инструментов на слуху, которые достойны того, чтобы их "пощупать", что я и собираюсь сделать в этой статье.
Если вашего инструмента нет в списке, или у вас просто есть что сказать, добро пожаловать в комментарии.
Итак, вот неформальный топ и субъективное описание.
psql
На первом месте psql, и это неудивительно. Надежный как автомат калашникова, бесплатный, стоит из коробки, что еще надо для счастья? Для редактирования запросов используется редактор, указанный в переменной окружения EDITOR, обычно ставят vim, nano или что-то в этом духе. Ну и вообще, psql — это unix-way, т.е. можно его запускать со своим редактором, своим пейджером для отображения результатов, ему можно на вход подавать sql-запрос через пайп, и вывод направлять куда надо.
Из минусов можно отметить слабенький автокомплит, а также то, что приходится заучивать неинтуитивные команды из серии \d
\dt+
\sf
и т.д. (впрочем, все описания команд доступны через команду \?
)
Ну, и работа в консоли и в виме — это не всех устраивает почему-то :)
На самом деле, иногда хочется иметь где-нибудь слева полный список таблиц/вьюх и иметь возможность щелкнуть мышкой по нужной, чтобы посмотреть, что там вообще. Т.е. хоть какой-то GUI. Работа в psql хоть и эффективна, но напоминает работу в темной комнате с маленьким фонариком, освещающим лишь только один объект за раз.
datagrip
IDE для баз. Несмотря на то, что продукт относительно свежий, он уже используется повсеместно. В основном за счет того, что сразу встроен в мегапопулярные продукты от компании JetBrains: IntelliJ IDEA, PyCharm, PhpStorm и т.д.
Собственно, эта его встроенность одновременно является и главной киллер-фичей продукта: вы редактируете, например, php-код, в котором есть строка с sql-запросом, и внезапно понимаете, что IDE вам подсказывает (прямо в вашем коде) синтаксис SQL, названия таблиц и их полей, подчеркивает красненьким, если что-то написано не так, форматирует SQL и многое-многое другое. Конечно, в этом же IDE можно делать и то, что умеют другие GUI для баз: просматривать списки таблиц и других сущностей, отдельно делать запросы, экспорт таблиц в разные форматы и многое другое.
Из особенностей я бы отметил следующие вещи:
- можно выделить несколько insert'ов и нажать "Edit as table" (см. картинку). После чего отредактировать это в удобном табличном виде вместо sql-синтаксиса, причем там же можно добавлять строки, колонки, экспортировать в csv и т.д.
- Можно сравнивать результаты двух запросов. Это полезно, когда пытаешься упростить сложный запрос, и при этом ничего не сломать.
- встроенность в код проработана не до конца. К примеру, при переименовывании в каком-либо интерфейсе колонки таблицы, IDE не находит нужные строки с SQL в коде (при этом автокомплит в этих строках работал), и наоборот, находит какую-то чушь.
- Визуальной разработки не очень много. Т.е. вы можете сделать таблицу, но view уже не можете. Если таблица содержит какие-то id с foreign key (допустим, ссылка на некий словарь), хотелось бы при в вводе данных в таблицу выбирать значения из словаря, а не вбивать айдишки.
- Если посмотреть таблицу в какой-нибудь из схем, то Datagrip посылает запрос set search_path = имясхемы, что приводит к плохим последствиям, если используется pgbouncer (а он используется почти всегда в случае с php или когда много серверов), так что для dev-разработки лучше использовать разные подключения: для работы кода — через pgbouncer, для ide — напрямую к базе.
Datagrip активно развивается, в частности, исправлены некоторые раздражающие баги с подсветкой синтаксиса.
В целом хороший современный инструмент, рекомендую.
pgAdmin
Им многие пользуются, но, скорее по привычке. Или потому что это бесплатно. pgAdmin4 — продукт странноватый, при этом в описании сказано, что это самый лучший опенсорс продукт для разработки и администрирования.
Как его использовать для администрирования — не очень понятно. pgAdmin'ом нельзя "заинитить" новый сервер, нельзя подправить pg_hba.conf или postgresql.conf. Видимо, имеются в виду скудные графики запросов в секунду, вывод подробностей конфигурации сервера и статистика в таблицах. Не уверен, в общем. Как вы испольуете pgAdmin для администрирования?
Как его использовать с точки зрения разработки — еще менее понятно. Субъективно, интерфейс в целом не удобен для разработки. Несмотря на то, что четвертую версию переписали на python + JS с jQuery, по сути, осталось всё то же самое.
Чтобы немного пояснить ситуацию, в голове разработчика такая картина: есть база на каком-то серваке, в ней — схемы, в схемах — таблицы и вьюхи. Т.е. таблица — максимум, 3-й уровень. А если база одна, то вообще второй уровень. Ткнул по таблице — увидел несколько первых строк.
В голове разработчика pgAdmin как-то так: "Смерть Кощеева на конце иглы, та игла в яйце, то яйцо в утке, та утка в зайце, тот заяц в сундуке, а сундук стоит на высоком дубу, и то дерево Кощей как свой глаз бережёт", а именно (см. картинку):
Есть группа серверов, в ней есть сервер, на сервере существуют базы, роли и т.д., из баз можно выбрать конкретную базу, в ней видно схемы, языки, еще бог знает что. В схемах можно выбрать нужную схему, в схеме 100500 всего, и где-то в конце списка "таблицы". В таблицах можно выбрать нужную таблицу, по ней надо кликнуть правой кнопкой мыши, там в большом списке выбираешь "view data", в этой "view data" есть "view first 100 rows" и уже там наконец-то смерть кощеева несколько строк для ознакомления.
Киллер-фичей pgAdmin является возможность дебажить хранимые процедуры pl/pgsql. Других бесплатных программ с этой возможностью я не встречал.
EMS Studio
EMS Studio, похоже, работает только под Windows. Это его главный недостаток, потому что, как известно PostgreSQL очень редко используют под виндой.
Я этот софт посмотрел только один раз под Wine, поэтому могу ошибаться, но вообще мне жутко не понравилось. Бешенное нагромождение непонятных иконок, невнятный интерфейс. Кстати, у меня под Wine заглючили всплывающие подсказки, и я играл в "угадай функциональность по картинке". Очень тяжело.
До кучи там зачем-то сделан визуальный конструктор запросов. Где вместо того, чтобы текстом написать where id = 5
, надо нажать мышкой несколько кнопок и понавыбирать из выпадающего списка. Тем, кто знает SQL — это не нужно, тем кто не знает — это не поможет.
Фичи, которые называют как удобные: auto-complete с алиасами, экспорт результата выполнения запроса в SQL формате (insert), удобный GUI для экпорта базы, возможность выполнять только выделенную часть SQL.
Умеет дебаг pl/pgsql. В общем, много чего умеет, но какой-то выдающейся особенности, что отличало бы от других, я не могу назвать.
NAVICAT
Navicat — это, наверное, самая богатая фичами программа. Она умеет всё, что умеют другие GUI для БД: дизайнер объектов, просмотрщик таблиц, автокомплит, инструменты проектирования базы, отладка pl/pgsql, импорт/экспорт и так далее.
Поистине всеобъемлющий софт, который работает практически на любой ОС. Навскидку, намного удобнее EMS Studio.
Киллер-фичей, на мой взгляд, является сравнение баз. Т.е. можно взять две базы, узнать, чем они отличаются по структуре и сформировать запросы для синхронизации.
Ценник, правда, что называется, "конский" — в два раза дороже, чем EMS. Но тут, похоже, это полностью оправдано.
PGCLI
Те, кто пробует работать с psql, сразу начинают мечтать о более богатом функционале, например, автодополнении. Для реализации этих хотелок существует pgcli.
pgcli умеет автодополнять ключевые слова, функции, таблицы, колонки, колонки в алисах. Умеет подсвечивать синтаксис, редактировать SQL в многострочном режиме без отдельного редактора и т.д.
Короче, pgcli — это, по сути, psql на стероидах.
phppgadmin
Многие из тех, кто перешел с MySQL, инстинктивно ищут аналоги phpmyadmin, и натыкаются на phppgadmin. К сожалению, phppgadmin не развивается уже несколько лет, так что о мертвых или хорошо, или ничего. В общем, промолчим, пожалуй.
Итог
Не по всем из этих инструментов у меня есть опыт использования, поэтому прошу высказаться в комментариях. Что используете вы?
Также надо отметить, что на конференцию pgday приедут разработчики популярных инструментов не только для постгреса, но и других бд, можно будет их помучать вопросами и высказать какие-то пожелания по фичам. В любом случае, приглашаем всех посетить это полезнейшее мероприятие, которое пройдет в Санкт-Петербурге 5-7 июля!
Комментарии (69)
VolCh
06.04.2017 15:04psql и pgAdmin III для администрирования и PhpStorm для разработки и поддержки.
SDSWanderer
06.04.2017 15:23+1Postico весьма удобный клиент под мак. Бесплатная версия довольно обрезанная.
caine
11.04.2017 00:23Удобный для админов да разработчиков внешних приложений к БД, а вот для разработчиков именно pgplsql — не очень. Попробуйте-ка набросать на скорую руку в Postico не просто запрос, а пару-тройку триггеров/функций?
SDSWanderer
11.04.2017 00:46Не смотря на то что я разработчик мне этот функционал обычно вообще не нужен, мне бы просто в пару кликов смотреть\редактировать содержимое и структуру таблиц. Не могу ничего сказать по поводу удобства встроенного редактора, итд так как редко им пользуюсь.
SDSWanderer
11.04.2017 02:47разработчиков внешних приложений к БД
Не обратил внимание, да, это про меня
13th_piligrim
06.04.2017 15:28+1Для себя недавно открыл DBeaver. Удобно, что можно использовать для разных СУБД: PostgreSQL, Oracle, Cassandra etc.
varanio
06.04.2017 15:30А что там, какая, так сказать, киллер фича?
zoroda
07.04.2017 06:54В DBeaver часто использую:
— удобные ERD диаграммы с возможностью перехода между таблицами
— удобную выгрузку данных в файлы и экспорт в другую БД
— автозаполнение по внешнему ключу при ручном редактировании данных
ls18
06.04.2017 15:50Не слышал о такой, спасибо. А по юзабилити как? Лучше, чем pgAdmin(3|4) на ваш взгляд?
Yrossia
06.04.2017 16:03гайз, а как же Electron.js? DBglass не самая мощьная утилита, зато очень удобная https://github.com/web-pal/DBGlass
lvn_alchevsk
06.04.2017 16:03А почему в обзор не попала классная утилита Squirrel ? Пользуюсь уже не один год, доволен…
varanio
06.04.2017 16:22Я даже не слышал о такой ни разу. А в чем именно классность?
lvn_alchevsk
06.04.2017 17:24Работает на всех распространенных платформах, можно настроить на любую БД для которой есть jdbc driver, очень продвинутый Sql editor, можно (с помощью плагина) строит диаграмму для таблиц БД. Кстати плагинов разных много… Хотя вот посмотрел DBeaver и очень понравился тоже.
Darych
07.04.2017 13:15Использовал Squirrel пару лет назад, сначала все были ок, потом полезли баги. Перешёл на Dbeaver. Удобнее чем Squirrel, функционала больше, как мне показалось. Например есть автоматическое скачивание дров.
Кстати, создатель DBeaver есть на Хабре :)
Rupper
06.04.2017 16:40Есть еще ems sql manager lite. Мы поскольку живем сьораклом в тоаде большую часть времени, это единственное что я могу переваривать. Что радует — есть кнопки коммит и роллбек. Есть проверка синтаксиса при создании процедур (и кнопка коммит !!!!!)
iit
06.04.2017 16:46-1Использовал все кроме NAVICAT.
pgAdmin3 радовал меня веселыми зависаниями и глюками, особенно через удаленное соединение по ssh (не светить же порты наружу). В 4-й версии эту фичу убрали, да и еще и запускать его нужно в браузере, в итоге я попрощался с pgAdmin вообще. Если бы они оставили его как десктопный вариант, переделали бы интерфейс и починили бы глюки. В общем если бы сделали аналог mysqlWorckbench для postgres то цены бы им не было!
EMS Studio порадовал меня глюками похлеще pgAdmin3 и абсолютно не адекватным интерфейсом.
phppgadmin показался очень неудобным продуктом — хотелось задушить себя при его использовании.
PGCLI интересен но зачем он, если есть psql.
В итоге локально webmin (да в старичке webmin есть утилиты для администрирования postgres) + datagrip из IDEA.
На проде только psql, на тесте psql+datagrip по ssh
Плюс иногда еще использую Open System Architect — codebydesign.com
или
PowerArchitect — www.sqlpower.ca/page/architect
Nellex
06.04.2017 17:00+1Использую иногда Valentina Studio вместо pgAdmin3, некоторые опции лучше реализованы.
QuickJoey
06.04.2017 17:03Из всех бесплатных утилит только DBeaver как-то может конкурировать с pgAdmin3. Но например роли создать из скрипта у меня не получилось, естественно этот же скрипт спокойно делает своё дело в консоли и pgAdmin. И очень перегруженный интерфейс, а уж когда в дереве под сотню серверов, прозрачность что и где ты делаешь теряется. У остальных, как правило всё грустно, до кода хранимых процедур не всегда доберёшься.
pgAdmin3, идеальный инструмент, единственное (!) чего мне не хватает, это нескольких результатов запроса. Чтобы можно было сделать так:
select * from TableA; select * from TableB;
а внизу увидеть оба набора данных. Очень надеюсь, что 10 версия postgres будет совместима pgAdmin3, потому что 4-я версия не странная, это кошмар.
keatis
06.04.2017 17:18Имхо, для разработчика больше datagrip подходит: автокомплит (помогает даже когда join описываешь), быстрое задание фильтров, сортировка, переход по смежным данным в таблице, запуск запросов по частям (CTE).
А pgAdminIII — больше для DBA: статистика использования таблиц, их параметры, dependencies/dependents, DDL под рукой…
Я сам так и не перешел на pgAdmin4, остался на третьей версии. Пользуюсь и datagrip, и pgadmin3.keatis
06.04.2017 17:25Тем, кто свой набор еще не нашел, можно попробовать пройтись по этому списку инструментов.
zloyreznic
06.04.2017 17:26Расскажите как вы пишите функции и дебажите их?
caine
11.04.2017 00:27В datagrip. Но удобством не особо блещет на фоне, например, dbforge для Oracle.
yuyuhabr
06.04.2017 17:32+1Есть ещё Adminer. Кроме MySQL и с Postgres неплохо общается. Всего один php file для установки, если не брать в расчет опциональные плагины. Мне больше, чем pgAdmin понравился.
pmcode
06.04.2017 18:07A HeidiSQL юзает кто? Он вроде Postgre давно поддерживает, но я последний раз пробовал, когда это еще было экпериментальной фичей. Для MySQL это моя любимая тулза, ибо идеальный UX.
Bobsans
07.04.2017 03:52юзал, для mysql самая удобная штука. на сколько я знаю она очень багано поддерживает postgre.
Pilat
06.04.2017 19:11Насчёт бесплатных — их уже практически нет. Точнее есть, но как конкуренты они не игроки.
Платные, которые ещё не засветились:
DbVisualizer — за исключением отладки триггеров отличная замена pgAdmin. Более чем отличная. Может закачать таблицу на 100.000 строк например и не рухнуть. Есть визуальный конструктор запросов. Есть бесплатная урезанная версия.
MicroOLAP Database Designer for PostgreSQL
Как следует из названия — моделирование баз данных. Мои тесты закончились отказом от него из за кучи ошибок, но было это год или два назад, и исправляли ошибки кстати в режиме реального времени и создатели русскоговорящие.
Splean
06.04.2017 22:51SEQUEL for PostgreSQL — лучшее что видел, хоть и кусается цена ;(
Ну и только на MacOS…
evkin
07.04.2017 00:55+1А есть у кого то опыт использования pgModeler (pgmodeler.com.br). Какие у кого впечатления?
У проекта лицензия GPL v3 и все исходники доступны. Но собранные (бинарные) версии программы автор продает по подписке от 10$ на пол года. Есть смысл заморачиваться и собирать его из исходников?DsideSPb
08.04.2017 15:08Я пробовал разок, рисовал для нового проектика схему с довольно плотными связями по составным ключам. Субъективно понравилось. Умеет довольно много постгресо-специфичных штук. Визуализация несколько громоздкая, элементы частенько перекрываются, но разложить до приличного вида возможно. Связи показывает прямо к столбцам, а не просто к табличкам.
Существуют уже собранные DEB-пакеты в репозиториях PGDG (официальных репах PostgreSQL). Я просто со скучающим лицом вбил в поиск pgmodeler по репозиториям, и когда результаты нашлись, насколько обалдел.
Я б сказал, что попробовать стоит. Если ну прям очень лень возиться со сборкой, можно попробовать на убунтовой виртуалке. И уже тогда решить, возиться со сборкой, или нет.
Bobsans
07.04.2017 03:23реактивные мозги с датагрипом + psql. в IDEшках от jetbrains мне кажется вообще все что для счастья нужно есть. а psql только потому что лень куда-то лазать если уже к серванту законектился)
Hesed
07.04.2017 10:29Мне очень не хватает средства разработки для PostgreSQL, которое бы позволяло удобно и наглядно визуализировать entity-relationship diagram в режиме отображения связей connect-to-column. Понимаю, что гуру сочтут это ламерством и, дескать, надо всё держать в голове и работать в консоли, но на объёмных базах данных со множеством связей мне удобнее держать всё перед глазами.
Например, вот так:gnomeby
07.04.2017 11:31>> pgAdmin: Субъективно, интерфейс в целом не удобен для разработки.
Напротив, всё удобно, чётко структурировано и едино, вы видите БД так, как видит её сам сервер. Кастомизируемо. Нет у вас в проекте FTS, можно спрятать отображение этих пунктов. Есть Foreign Servers, можно включить их отображение.
А со временем нарабатываются практики как быстро накликать мышкой до нужных данных.
Очень популярный инструмент у QA, который они осваивают самостоятельно.
Ваше описание pgAdmin и psql напомнило мне себя. Я как-то сидел на phpexperteditor, эдакий редактор на стеройдах для PHP, и с недоумением смотрел на людей использующих eclipse + PDT (PHP Dev Tool eclipse plugin) для работы. Пока через 2 года я всёже решил несколько дней посидеть на этой связке. В первый день я сопротивлялся, а к концу недели я понял что был не прав все эти годы.
timetogo
07.04.2017 13:29«как известно PostgreSQL очень редко используют под виндой» — разработка баз данных и место её развёртывания — разные вещи. Php-шников много на винде сидит, это же не значит, что и сайты на винде работают. EMS, Toad, Idera существуют только в версии для Windows, например.
«Где вместо того, чтобы текстом написать where id = 5, надо нажать мышкой несколько кнопок и понавыбирать из выпадающего списка» — а зачем вообще тогда все вышеназванные программы использовать, делать всё в psql.
А по теме: для моделирования — Toad modeler, для перегонки данных — SQL Power Architect, для управления — Pgadmin, Valentina Studio, визуальный построитель запросов — FlySpeed. Все программы или бесплатны, или имеют урезанные бесплатные версии.
ksdaemon
10.04.2017 15:14-1Вот это да!!! Охренеть! Прям открыли глаза на такие полезные инструменты! А то мужики-то все напрямую в бинарных файлах базы всё правят и не знают про /* Подставить любой из вышеперечисленных инструментов */
Простите, не сдержался :) Понедельник — день тяжелый!)
Legushka
11.04.2017 13:39а почему полный перечень ПО не вписали,
у меня кроме datagrip еще периодично notepad++ открывается
потом такие инструменты: https://explain.depesz.com/ парсер аналайза
http://json.parser.online.fr/ онлайн парсер json
ls18
При работе с БД использую pgAdmin4 — работать можно, но совсем не торт. Тем более после того, как работал с Oracle в TOAD. Даже SQL Developer будет получше pgAdmin4 (3 тоже :)).
sombik
Извините, но после пары лет работы с pgAdmin3 — переход на новую версию так для меня и не состоялся. Уж больно она «подтормаживает» местами. Хотя это сугубо только мое мнение.
codemax
Она очень сильно подтормаживает по сравнению с третьей версией. Стильно, модно, молодежно, но уж очень раздражают эти тормоза. И это на довольно неслабой машине (десктопный Core i5, 16 Gb оперативы).
Поэтому да, остаёмся пока на pgAdmin3.
ls18
Согласен, но как то привык уже. Но вроде pgAdmin3 не работает с 9.6, что печально, если не ошибаюсь конечно.
VolCh
Работает.
evkin
Ну как сказать не работает. При подключении, предупреждающий месседж + иногда вываливают сообщения про ошибки, если по свойствам таблиц лазить/править, которые не мешают вносить изменения.
Так что совсем не критично. После ознакомления с pgAdmin4, остался на тройке и работаю с 9.6 нормально
dimv36
У меня форк есть pgadmin с поддержкой политик, методов доступа и некоторыми исправлениями ошибок. см. https://github.com/dimv36/pgadmin3
Пользуйтесь на здоровье
dimv36
и он совместим с 9.6
pasha_golub
Скомпиленные бинари есть где-то?
dimv36
Пока нет. А под что Вам нужно?
evkin
Присоединюсь)) По 64 битную винду качнул бы с удовольствием
ls18
Попробовал DBeaver. С первого взгляда достойная вещь, может быть в дальнейшем и вылезут какие-либо подводные камни, но в целом очень удобно. Особенно построение ER-моделей выбранной таблицы — просто бомба.