LINUX.ORG.RU

Компания JetBrains выпустила финальную версию IDE для баз данных

 data grip, , ,


1

3

JetBrains выпустила финальную версию IDE для баз данных. Продукт ранее называвшийся 0XDBE теперь получил имя DataGrip.

Желающие ознакомиться с новой версией могут сделать это на сайте компании: https://www.jetbrains.com/datagrip/

Поддерживаемые СУБД
DataGrip — это универсальная IDE для работы с MySQL, PostgreSQL, Oracle, SQL Server, Sybase, DB2, SQLite, HyperSQL, Apache Derby и H2.

Работа с объектами БД и генерация кода.
DataGrip предоставляет инструменты для работы с объектами базы данных. Если вы создаёте или изменяете таблицу, добавляете или изменяете колонку, индекс, ключ в уже существующей, используйте графический интерфейс. Подобные изменения сопровождаются генерацией соответствующего скрипта: вы можете сразу выполнить сделанные изменения в базе или скопировать сгенерированный DDL-запрос в редактор и работать уже непосредственно с кодом.

Автодополнение.
DataGrip поддерживает автодополнение кода, что ускоряет написание запросов. Когда вы набираете код, IDE понимает контекст и делает работу за вас: не только помогает писать код, зная о ключевых словах и именах объектов БД, но и учитывает зависимости при написании JOIN, подсказывает тип параметров для выполнения фукнции, описывает струкруту таблицы в предложениях INSERT. Помимо этого, мы добавили шаблоны (Live Templates) для написания однотипного кода, а вы можете создавать собственные.

Поиск по коду и переименование.
IDE понимает, какие объекты базы вы используете в коде: если переименовать объект в запросе, то же случится и в базе. Переименуйте переменную или алиас в одном месте: это произойдёт во всём скрипте.

Есть поиск использования переменной или объекта (колонки, таблицы) в запросе, а также возможность перехода от использования к месту объявления. Если вы применяете то же самое к объекту, который уже был создан в базе, курсор отправит вас в окно структуры базы данных.

А если в запросе использовано имя объекта, которого нет в базе, например, ошиблись с названием столбца или таблицы, IDE сообщит о проблеме и предложит возможные решения.

Работа с данными.
Табличный редактор в DataGrip может фильтровать данные. Записывается условие в поле Filter criteria, как в предложении WHERE и увидите то, что вам нужно. Текстовый поиск по таблице тоже умеет фильтровать — удобно, если ищете данные, а колонку забыли. Есть навигация по данным — при наличии связи по внешним ключам можно попадать в те строчки таблиц, которые ссылаются на эти по foreign key, и наоборот.

Выполнение запросов.
Выбирайте, что IDE должна запускать, если курсор стоит на вложенном запросе: внутренний, внешний или все запросы скрипта. Для выполнения части запроса выделите код и запустите его. Анализируйте план выполнения запроса для оптимизации. В окне результата запроса доступны многие функции Table Editor, например он позволяет изменять данные и в нём работает текстовый поиск. Сравнивайте два результата в смежных окнах.

DataGrip — IDE на базе платформы IntelliJ, а значит в ней есть:

  • Мощный текстовый редактор с мультикурсорами и синтаксическое выделение кода.
  • Интеграция с системами контроля версий: Git, Subversion, и т. д.
  • Плагины: Terminal, Textmate bundles, и т. д.

Для проектов с открытым исходным кодом компания предоставляет бесплатную версию IDE: https://www.jetbrains.com/buy/opensource/?product=datagrip

>>> Подробности



Проверено: maxcom ()
Последнее исправление: Psych218 (всего исправлений: 6)
Ответ на: комментарий от BaBL

У них же сейчас есть помесячная оплата. Плати когда надо.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Угу, от однотипного кода по составлению запросов к таблицам приходим к однотипному коду по составлению вызовов хранимых процедур.

Чего там сложного?

SELECT * FROM get_hren_znaet_chto();
Это для этого нужен ORM? :-)

А по-мне SQL отвратителен. Теория там примитивная, а вот конкретный синтаксис убог. Он нормальный, если ты пользуешься SQL-ем как пользователь, для чего его изначально и придумывали. А когда ты используешь этот SQL внутри программы, всё очень плохо.

Так используй «снаружи» программы :-) Вынеси SQL-запросы в отдельный текстовик, дай каждому запросу ID, а коде на уродливом цепепе или жаве вытаскивай по ID и запускай. Или программисты нынче такие тупые, что они не могут этой элементарщины состряпать, и думают «а зачем мне делать что-то, если можнА взять ОРЭЭМ. Зячем изёбретать вилясипед??!11» :-)

anonymous
()
Ответ на: комментарий от anonymous

90$ - это за год

И после этого у тебя остается пожизненная лицензия на купленную версию. Перестаёшь платит — просто не будет новых релизов, старые не исчезают.

anonymous
()
Ответ на: комментарий от Rastafarra

расскажи мне в двух словах как отследить все хранимки, которые отвалились потому что в табличке грохнули поле?

Во-первых, если говорить за Postgres, то хранимки на SQL автоматически отслеживаются СУБД на предмет зависимостей — СУБД не обеспечивает целостность и при попытке грохнуть в таблице поле, вылетает ошибка. Во-вторых, если хранимка написана не на SQL, то отследить неработающие хранимки можно только по ошибкам. Только вот, в отличие от скомпилированного кода, хранимки можно поправить на работающей системе без остановки последней. Чуешь отличия? :-)

anonymous
()
Ответ на: комментарий от anonymous

СУБД не обеспечивает целостность

Следует читать как «СУБД обеспечивает целостность».

anonymous
()
Ответ на: комментарий от anonymous

хранимки можно поправить на работающей системе без остановки последней.

здравствуйте, это дедлоков тред?

Rastafarra ★★★★
()

Я не очень понял, community edition нет? :(

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от Rastafarra

ближе к телу: oracle, pl/sql. куда чего запрашивать? :)

SELECT * FROM ALL_SOURCE WHERE TEXT LIKE '%чёнадонайти%'

Нo я в Oracle не копенгаген, видел его только через щёлку SAPa.

Igor_FF
()

Н-да, с ораклом они это так и не подружили: пытаюсь отредактировать хранимку в пакете - отступов нет, странные синтаксические ошибки. Закапывайте.

anonymous
()
Ответ на: комментарий от Rastafarra

ты хотел сказать при вызове? прикольный метод ))

А как ещё? С ORM всё тоже самое. :-) Наивно полагать, что никто не выполнит CREATE OR REPLACE FUNCTION ... или ALTER TABLE ... в системе это предусматривающей :-) И после того, как ORM сгенерирует и отправит запрос, словит всё ту же ошибку, представь себе :-)

anonymous
()
Ответ на: комментарий от anonymous

UTL_FILE.PUT_LINE(FILE => v_file_handle, buffer => '+----------------------------+');

',' - unexpected

anonymous
()
Ответ на: комментарий от Igor_FF

SELECT * FROM ALL_SOURCE WHERE TEXT LIKE '%чёнадонайти%'

не совсем понятно как именно эта хрень поможет допустим поменять тип или еще какая фигня.

Rastafarra ★★★★
()
Ответ на: комментарий от anonymous

С ORM всё тоже самое. :-) Наивно полагать, что никто не выполнит CREATE OR REPLACE FUNCTION

орм и сырцы у всех участников проекта вроде одни? или как? пришел враг и дернул алтер?

Rastafarra ★★★★
()
Ответ на: комментарий от winlook38

o.status = 'INVALID'

мне всегда казалось что оно инвалидится при перекомпиляции, а добавление в функцию допустим нового параметра для всех остальных функций ее не вызывает.

не?

Rastafarra ★★★★
()
Последнее исправление: Rastafarra (всего исправлений: 1)
Ответ на: комментарий от Rastafarra

орм и сырцы у всех участников проекта вроде одни? или как? пришел враг и дернул алтер?

Ты сам поднял эту проблему :-) Ты спросил, мол «как узнать, какие хранимки отвалились, если кто-то дёрнул альтер». Теперь, оказывается, в ваших проектах, где у всех участников одни сырцы, это невозможно :-) Бугага :-) Ну, а вообще-то, согласно закону Мёрфи, когда-нибудь возникнет ситуация, где код ORM будет не соответствовать структуре данных в базе. Просто потому, что БД позволяет выполнять любые DDL во время выполнения без каких-либо проблем с её т.з. А вот ORM - это ещё одна большая проблема :-)

anonymous
()

Подключился к MySQL через SSH. Показывает только таблицы. А где все остальное? Пунктов создать что-то кроме таблицы тоже нет. Это ограничения работы через SSH чтоли?

d9d9 ★★★★
()
Ответ на: комментарий от anonymous

Ты спросил, мол «как узнать, какие хранимки отвалились, если кто-то дёрнул альтер».

это в тему орм вс хранимки.

орм: меняем классы и видим где типы отвалились просто потому что у нас есть развитая система типов. допустим пришли враги и надергали нам альтеров без нашего ведома, ну бывает, да, что-то порушится, но это внештатная ситуация.

хранимки: делаем альтер и у нас сыпятся хранимки, вот только у нас нет нормального способа узнать где что отвалились. все прекрасно рушится даже в отсутствии врагов.

Rastafarra ★★★★
()

0xDBE (Natasha) DB 142.4250.1

вай, такая молодая, а уже наташа

anonymous
()
Ответ на: комментарий от Rastafarra
SQL> create or replace function test1(n integer) return integer is begin return n+1; end;
  2  /

Функция создана.

SQL> create or replace function test2(n integer) return integer is begin return test1(n)+1; end;
  2  /

Функция создана.

SQL> select o.status from all_objects o where o.object_name = 'TEST2' and o.object_type = 'FUNCTION';

STATUS
-------
VALID

SQL> create or replace function test1(n integer, t integer) return integer is begin return n+t; end;
  2  /

Функция создана.

SQL> select o.status from all_objects o where o.object_name = 'TEST2' and o.object_type = 'FUNCTION';

STATUS
-------
INVALID

SQL>
winlook38 ★★
()

BaBL, я твой ответ прочитал в удаленных, можешь не повторять.

kep
()
Ответ на: комментарий от anonymous

А что в MySQL завезли что-то кроме таблиц?

Оно там лет 10 как. Правда немного через задницу реализованное. Другое дело что большинство мегакодеров и sql то толком не знают и все что сложнее таблиц для них не существует.

В общем в другой БД показывает список stp, которые уже есть в базе, но при попытке их открыть пишет «definition is not available or empty». Как бы толку от такой IDE где-то немногим больше 0.

d9d9 ★★★★
()
Ответ на: комментарий от d9d9

Это шутка чтоли? А зачем тогда IDE вообще?

А что такое IDE по твоему? Это набор инструментов, позволяющих писать код. В какой-то мере mysql клиент можно назвать IDE. Он все это позволяет.

BaBL ★★★★★
()
Ответ на: комментарий от BaBL

А что такое IDE по твоему?

По моему IDE должно показывать список объектов в БД и предлагать опции по созданию новых или удалению/модификации имеющихся. А не тупо консоль SQL.

d9d9 ★★★★
()
Ответ на: комментарий от anonymous

Следует читать как «СУБД обеспечивает целостность».

Ффух, а я уже загрузился, чего же я не понял в том абзаце :)

hobbit ★★★★★
()
Ответ на: комментарий от winlook38
create or replace function test1(n integer) return integer is begin return n; end;

create or replace function test2(n integer) return integer is begin return test1(n); end;

-- обе валидные.

-- меняем тип, test2 становится невалидным
create or replace function test1(n varchar2) return varchar2 is begin return n ; end;

-- вернули как было, test2 остался невалидным
create or replace function test1(n integer) return integer is begin return n; end;


select o.object_name, o.status from all_objects o where o.object_name in ('TEST1', 'TEST2') and o.object_type = 'FUNCTION';

ну понятно, да, делаем, все валидное, ломаем, восстанавливаем. после восстановления test2 не валидная.

более того: create or replace test2 в обоих случаях test1(integer и varchar) делает test2 валидной, всем пофиг на типы :)

Rastafarra ★★★★
()
Ответ на: комментарий от Rastafarra

ну понятно, да, делаем, все валидное, ломаем, восстанавливаем. после восстановления test2 не валидная.

При обращении к невалидному объекту произойдет его компиляция:

SQL> select o.object_name, o.status from all_objects o where o.object_name in ('TEST1', 'TEST2') and o.object_type = 'FUNCTION';

OBJECT_NAME                    STATUS
------------------------------ -------
TEST1                          VALID
TEST2                          INVALID

SQL> select test2(1) from dual;

  TEST2(1)
----------
         1

SQL> select o.object_name, o.status from all_objects o where o.object_name in ('TEST1', 'TEST2') and o.object_type = 'FUNCTION';

OBJECT_NAME                    STATUS
------------------------------ -------
TEST1                          VALID
TEST2                          VALID

SQL>

более того: create or replace test2 в обоих случаях test1(integer и varchar) делает test2 валидной, всем пофиг на типы :)

Оракл неявно приводит символьный тип к числовому, так что если смысл данных не изменился, все будет работать. Более того, если ты просто в коде напишешь присвоение числовой переменной строкового значения, то так же все будет валидно, и сломается в рантайме, если значение не скастуется к нужному типу. Это не относится к озвученной тобой проблеме, это особенности, которых везде полно и которые просто нужно знать.

winlook38 ★★
()
Ответ на: комментарий от winlook38

ну вообще прикольно :)

у меня твердо отложилось что это не работает, память обновилась.

Rastafarra ★★★★
()
Ответ на: комментарий от Rastafarra

орм: меняем классы и видим где типы отвалились просто потому что у нас есть развитая система типов.

Враньё. :-) Классы есть в вашем любимом языке программирования на клиенте. А в БД классов нет. Поэтому любая ORM - это отображение классов на клиенте в сущности БД. Изменяя классы на клиенте, вы также должны менять схему БД. Компилятор того же цепепе или тоже же жабы физически не способен обеспечить целостность кода клиента со схемой БД. Потому что компиляторы эти ущербны и кое-как лишь генерят шаблонный код :-) Сделать что-то ещё во время компиляции на усмотрение пользователя они не способны. Так что оставьте эти сказочки своей команде разработчиков :-) Бугага :-)

допустим пришли враги и надергали нам альтеров без нашего ведома, ну бывает, да, что-то порушится, но это внештатная ситуация.

Это у вас в команде внештатная ситуация. А мире СУБД выполнить ALTER TABLE ... и/или CREATE FUNCTION/CREATE VIEW ... как 2 пальца об асфальт :-)

хранимки: делаем альтер и у нас сыпятся хранимки, вот только у нас нет нормального способа узнать где что отвалились. все прекрасно рушится даже в отсутствии врагов.

Если делатель альтеров настолько туп, что меняет только хранимки, не трогая схемы БД, если он настолько ленив, что не тестирует изменения, особенно, перед деплоем на «боевую» машину, то тогда да, всё прекрасно рушится :-) Если у вас в команде такие спецы, то я даже не знаю, что тут сказать :-)

anonymous
()
Ответ на: комментарий от anonymous

умеет ли она менять схему БД при изменении клиентского кода?

А вот если бы умела? Как эти изменения потом на тест и дальше на прод выкатывать? Для махинаций с БД есть механизм миграций, а IDE может помочь создать DDL после изменения кода (правда 13-ая не умеет так помогать).

Написанная с большой потугой возможность автодополнения компонентов SQL-запросов по метаданным БД - это игрушка

Возможностей и правда не всегда хватает, приходится SQLDeveloper расчехлять.

diafour
()
Ответ на: комментарий от diafour

А вот если бы умела? Как эти изменения потом на тест и дальше на прод выкатывать?

Это должна делать уже другая программа-генератор разницы дампов схем машин разработчика и деплоя. Либо, если над схемой работают совместно, то это будет разница версий схем, подлежащая к паблишенгу в VCS :-)

anonymous
()
Ответ на: комментарий от EXL

Докупи Xeon, нищеброд, IDE от JetBrains требует именно его.

Бла-бла-бла. Сколько там у тебя на hello world Clion жрал? Три гига, помнится?

anonymous
()
Ответ на: комментарий от moooV

Какая конченная конторка, даже лицкнзию не может себе позволить приобрести. Они тебе водой с воздухом зп отдавали?

anonymous
()

/* IDE написана на Java... */
Дальше читать не стал.

pascal ★★★
()

мерзкая конторка с зажратыми неадекватами. Одним словом «ненужно» от другого слова «совсем».

anonymous
()
Ответ на: комментарий от EXL

Так я этот ваш рисунок видел. Я проверял на Clion version 1.0, и собирал по-моему Scribus (просто взял из списка на https://en.wikipedia.org/wiki/CMake) и тупо собрал.

Ну и результат, лучше чем (даже) мною :))) ожидалось. Очень мало памяти ело и никаких бешенных жоров CPU. На машинке - почти антиквариате (intel Dual-Core e2140).

P.S. прошу извинить за мой тон.

anonymous
()
Ответ на: комментарий от anonymous

Не знаю как там у «программистов нынче» с интеллектом, но как сисадмин могу точно сказать: без ORM писать то, что я пишу для прода было бы очень неудобно. И поскольку высокая производительность не является приоритетом, нет смысла изобретать ORM из файликов с запросами.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.