Как стать автором
Обновить

Комментарии 32

Может мой вопрос будет немного не в тему, т.к. статья про изучение работы с уже существующей базой, но с помощью каких инструментов можно создавать ER-диаграммы для PostgreSQL? Вот та же схема из статьи, она в чем сделана?
Например у MySQL есть Workbench, удобный и бесплатный. И что очень важно — официальный, т.е. заточен под конкретную СУБД, развивается одновременно с ней, поддерживает нужные типы данных и прочие возможности, которые есть в самой СУБД. Для PostgreSQL не смог такого найти. На данный момент пользуюсь SQL Power Architect Community Edition (кстати, коммерческая версия стоит каких-то безумных денег). После долгих ковыряний, нашел как добавить в него нужные типы данных, такие как UUID или JSONB, но все равно его возможностей не хватает. Например, нельзя добавить связь между таблицами, находящимися в разных схемах. Да и вообще, на начальных этапах изучения, довольно трудно работать с инструментом, который не отражает всех возможностей и особенностей конкретной СУБД.

Я, увы, тоже не знаю такого инструмента. Правда, мне лично никогда и не нужна была программа, чтобы менять схему БД — я по-старинке считаю, что это надо делать скриптами, а не мышкой.


Но что совсем смешно, я до сих пор не смог найти даже инструмент, чтобы просто удобно рисовать ER-диаграммы, вообще без всякой привязки к конкретной БД.


А картинка в статье от безысходности нарисована руками в LibreOffice.

Visual Pardigm

Одно время, я активно использовал Visual Pardigm, для рисования диаграмм.

У них есть Community Edition
После создания диаграммы, можно из неё генерить SQL



И причем, как вы и хотели, с перламутровыми пуговицами без привязки к конкретной БД :)

Data Grip
В Data Grip, обнаружил вот такую функцию.

А разве Community Edition предоставляет такую возможность? На сколько мне известно кодогенерация начинается только с версии standart и выше.
Скрин в предыдущем ответе, как раз иллюстрирует этот метод :)
Такая возможность доступна если выделить один объект или группу объектов.
В результате, мы получим пригодный SQL для дальнейшего использования в любимой IDE или напрямую, через консоль.



А вот генерация через вкладку Tools -> DB -> Generate Database, действительно не доступна в Community Edition.

Удивительно) у них на сайте в зависимости от версии заявлена генерация и даже мысли небыло о том что она есть в Community Edition))) Ни кому нельзя доверять))
ER — диаграммы можно рисовать в CA ERWin Data Modeler v7 или v9. Позволяет автоматически генерировать SQL код и, подключившись к БД, создавать таблицы и все необходимое, или выгрузить *.dll файл и уже им создать таблицы. Так есть ERWin Process Modeler v7 для IDEF и DFD,
*.dll — может имели ввиду ddl (Data Definition Language)?

А вообще как сейчас работается с ERWin?
Раньше доводилось работать с 4й версией, но потом у них исчез BPWin, да и новых версий ERWin не наблюдалось и пришлось пересесть на VP, а сейчас смотрю уже аж 7я версия DM. Помнится в 4ке генерации для postgresql не было и использовали похожие для выгрузки БД с «обработкой напильником»)) А как сейчас у них с этим?
Посмотрите в сторону pgAdmin4, там вроде были и ER диаграммы, и графический анализатор плана выполнения запроса. В своё время пользовался pgmodeler, но он платный. Вот список GUI утилит.
Тоже использую PgModeler. Его автор представляет исходники, так что есть возможность скомпилировать самому.
Хорошая статья. Интересно про полнотекстовый поиск, что напишите? Был проект с поиском. Много разных решений было испробовано, но то ли наши sql-разработчики рукожопы «профессионалы» были. То ли еще, что но от полноценного поиска в базе отказались…

Спасибо. Полнотекстовый поиск Постгрес умеет, напишем со временем и про него.

Full Text Search in PostgreSQL работает отлично, морфология, релевантность — все это есть. Но все таки я думаю узкозаточенные решения (Sphinx, ElasticSearch) использовать лучше чем встроенный FTS. Лично наша команда подумывает об оптимизации поиска в купе с переездом на поисковые движки.
Вот мы и перешли на Эластик…

Это всё хорошо пока не надо учитывать ещё какое поле в запросе.

Sphinx это умеет. Проблема начинается когда полей для учёта ровно столько, сколько их собственно в БД.
Но она скорее идеологическая, поскольку он это тянет.

Насколько я помню, то Solr/Lucene/ElasticSearch с этим тоже могут справиться

Вопрос только как он это умеет… во многих usecases это крайне медленно. Ну и опять же лишние запросы туда сюда увеличивают время отклика.
т.е. если у вас задача по сути искать только по тексту то это наверное хороший вариант, а вот если полнотекстовый поиск у вас просто винтик в большой и связанной системе то лучше не отходить от кассы (postgres) далеко.

Sphinx.
База была на 20млн документов, если память не изменяет.

Просто полнотекстовый поиск и поиск с условиями по 4 аттрибутам существенной разницы в скорости ответа не показывал.

В каких случаях у вас было «крайне медленно»?
А какие версии БД планируется поддерживать?
Разницу рассмотреть тоже иногда очень полезно.

Будет ли postgis?)

Она должна без проблем загрузиться на любую версию, начиная с 9.4.


А для Постгиса мы вряд ли сделаем свою демо-базу. Тем более, что там вроде есть над чем развлекаться (взять какой-нибудь openstreetmap).

Спасибо, если бы еще готовый докер образ был, вобщебы круто было.

Спасибо, подумаем.

Я тут сделал для внутренних нужд docker image, если не против — то могу поделиться

Конечно делитесь! Спасибо, что нашли время этим заняться.

Спасибо! Мы, кстати, не так давно немного поменяли базу (описание изменений здесь: https://postgrespro.ru/education/demodb).

Ага, увидел, во входном параметре (DUMP_URI) можно указать ссылку на любой дамп с вашего сайта — он и будет развернут.
Спасибо за статью и демонстрационную базу!
Посоветуйте, пожалуйста, какую литературу лучше использовать для изучения языка?

Пользуйтесь на здоровье.


Насчет литературы… Специальной книги про SQL именно для Постгреса, боюсь, пока не существует. Да и вообще сейчас с книгами про Постгрес на русском беда — есть что-то переводное, и то так себе.


Но вообще можно читать любую книгу про SQL, которых тысячи. Постгрес весьма близок к стандарту, так что проблем не должно быть. Порекомендовать что-то конкретное не готов, но можно попробовать сориентироваться по ассортименту приличных издательств и отзывам. Ну, как вариант.

Спасибо!
По неясной причине создаётся пустая база:

postgres@host:/.../ psql -f demo_small.sql
...тут вывод, сообщений об ошибках нет
postgres=# \c demo
You are now connected to database "demo" as user "postgres".
demo=# \dt
No relations found.


ubintu 16.04, postgresql 9.5.5

Не могли бы вы выложить дамп, созданый утилитой pg_dump? (демо-база dvdrental из-под pg_restore поднялась).

Сделайте set search_path = bookings, public;
Если поможет (должно), то, чтобы каждый раз не набрать эту команду, можно сделать один раз alter database demo set search_path = bookings, public;

Зарегистрируйтесь на Хабре , чтобы оставить комментарий